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 準拠のコンパイラなら警告を出してくれるはず。