0

ここには2つの構造があります。最初は:

struct complex {
    double real, imaginary;
};

セミコロンで終わる必要があることはわかっています。

しかし、これは機能を備えています

struct complex add_complex(struct complex c1, struct complex c2) {
    struct complex c3;
    c3.real = c1.real + c2.real;
    c3.imaginary = c1.imaginary + c2.imaginary;
    return c3;
}

ここで、末尾にセミコロンを含めないと、コンパイラはエラーを生成しません。なんで?

4

2 に答える 2

7

構造体定義の最後には常にセミコロンが必要です。したがって、定義;からを削除すると、コンパイラ エラーが発生します。struct complex

2 つ目 ( add_complex) は構造体定義ではなく、構造体を返す関数です。関数の最後にセミコロンはありません。

  • つまり、このように書くと struct complex add_complex() { }; それからこれも真実です。なんで?

「OK」であることは、実際にはコンパイラに依存します。私が使用したほとんどのコンパイラ (gcc と Micosoft など) はこれを許可しますが、正しいフラグを使用して警告/エラーを表示するようにすることができます ( -pedanticgcc に追加すると:が返され、warning: ISO C does not allow extra ‘;’ outside of a function [-pedantic]追加できます-Werror)。 )

于 2013-04-01T12:17:04.833 に答える
-1

構造体定義を使用して、変数などをすぐに宣言できます。たとえば、次のことができます。

struct complex {
    double real, imaginary;
} number;

numbertypeで変数を宣言するためstruct complex。このように関数を宣言することもできます

struct complex {
    double real, imaginary;
} add_complex(struct complex c1, struct complex c2) {
    struct complex c3;
    c3.real = c1.real + c2.real;
    c3.imaginary = c1.imaginary + c2.imaginary;
    return c3;
}

この定義は他に使用できないため、関数定義の後にセミコロンを付ける必要はありません。

于 2013-04-01T13:12:06.773 に答える