16

私がこの関数を持っているとしましょう:

void func() {}

funcいくつかのパラメーター(たとえばfunc(132))を使用して呼び出すと、C++コンパイラーはエラーを生成しますが、Cコンパイラーはエラーを生成しません。

この場合、2つのコンパイラの違いは何ですか?C++そして、このエラーを発生させることによってどのような長所/短所がありますか?

4

2 に答える 2

37

長所も短所もありません。Cは、1980年代のK&RCとの互換性のためにこれをサポートしています。1980年代に作成したコードをまだ使用している場合は、この機能が気に入るかもしれません。コンパイラからより良い診断が必要な場合は、この機能が気に入らないかもしれません。

void func();

Cでは、これは不特定funcのパラメーターを取ることを意味します。

関数がパラメーターを受け取らないように指定する必要がある場合は、次のように記述します。

void func(void);

C ++では、2つのプロトタイプは同じです。(Cでは、2番目のものだけがプロトタイプです。)GCC / Clangの-Wstrict-prototypesオプションを使用してコンパイルすると、必要に応じてCで使用するための警告が表示さvoid func();れます。

これは関数宣言についてのみです。 どちらの言語でも、次の関数定義は同じです。

// These two are the SAME
void func() { }
void func(void) { }

// These two are DIFFERENT
void func();
void func(void);
于 2012-11-26T09:04:04.843 に答える
8

C ++では、その関数には引数がありません。Cでは、引数の数が不確定であることを意味します。

intこれは、すべての関数がを返し、引数が渡されることについてはるかにリラックスしたCの非常に初期の時代からの引き継ぎです。

于 2012-11-26T09:03:58.077 に答える