C++ または C の foo(void) と foo() には違いがありますか? 質問する

C++ または C の foo(void) と foo() には違いがありますか? 質問する

次の 2 つの関数定義を考えてみましょう。

void foo() { }

void foo(void) { }

これら 2 つには何か違いがありますか? 違いがないとしたら、なぜ議論がvoidあるのでしょうか? 美的理由でしょうか?

ベストアンサー1

歴史的注記:この回答は C17 以前の版に適用されます。C23 以降の版では扱いがvoid foo()異なります。


Cの場合:

  • void foo()foo「不特定の数の不特定の型の引数を取る関数」を意味します。
  • void foo(void)foo「引数を取らない関数」を意味する

C++の場合:

  • void foo()foo「引数を取らない関数」を意味する
  • void foo(void)foo「引数を取らない関数」を意味する

したがって、と記述することでfoo(void)、両方の言語で同じ解釈が実現され、ヘッダーが多言語対応になります (ただし、通常、ヘッダーを真にクロスランゲージ対応にするには、さらにいくつかの操作を行う必要があります。つまり、extern "C"C++ をコンパイルする場合は、ヘッダーを でラップする必要があります)。

おすすめ記事