私がこの関数を持っているとしましょう:
void func() {}
func
いくつかのパラメーター(たとえばfunc(132)
)を使用して呼び出すと、C++
コンパイラーはエラーを生成しますが、C
コンパイラーはエラーを生成しません。
この場合、2つのコンパイラの違いは何ですか?C++
そして、このエラーを発生させることによってどのような長所/短所がありますか?
長所も短所もありません。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);
C ++では、その関数には引数がありません。Cでは、引数の数が不確定であることを意味します。
int
これは、すべての関数がを返し、引数が渡されることについてはるかにリラックスしたCの非常に初期の時代からの引き継ぎです。