次の 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++ をコンパイルする場合は、ヘッダーを でラップする必要があります)。