C/C++ FAQ #1 (引数に void を受け取る関数)
おいらも FAQ を書いてみる。
引数の void
void example(void); void example();
これは、C++ ではどちらも引数なし、という意味だが、C では example() の方は関数の引数の情報が単に不明である、ということになる。
要するに:
void example() { printf("ok\n"); } int main(int argc, char *argv[]) { example(1, 2, 3, 4); }
というコードは、C 言語としてコンパイル・実行する分にはまったく問題ない。C++ としてコンパイルはできない。
ときどき見かける、C 言語の:
void main() { printf("hello, world\n"); }
というメインエントリポイントは、本来受け取るはずの int と char *[] を無視する形の、C 言語的には正しい実装だったりする。ただし、本来 int を返さなければならないのに void である点は、ANSI C 準拠のコンパイラなら警告を出してくれるはず。