int main() と int main(void) の違い
int main() と int main(void) は一見すると同じですが、C では大きな違いがありますが C++ ではどちらも同じものです。 例えば、’foo()’ と宣言された関数は、C では任意の数の引数を取ることができます (foo(), foo(1), foo(‘A’,1) を呼んでもエラーにはなりません)。
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
パラメータのない関数は任意の数の引数を取れるので、上記のコードはエラーを出さずにうまく実行できます、ただし C++ではこのようには行きません。 C++では、エラーが発生します。 見てみましょう。
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
上記のコードを実行すると、関数 ‘foo’ に引数を渡すことができないため、エラーが発生します。
しかし、foo(void)を使うと、関数が任意の引数を取ることが制限され、エラーが発生することになります。 見てみましょう。
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
上のコードは ‘foo(void)’ を使用しているためエラーが発生し、これは ‘foo()’ で行っていたように、関数 ‘foo’ に任意の引数を渡すことができないことを意味します。
つまり、C++ではfoo(void)もfoo()も同じですが、Cでは違うのです。
int main() と void main() と main() の違い
他の関数と同様に main も関数ですが、プログラムの実行は常に ‘main’ から始まるという特殊な性質を持っています。 戻り値の型は「int」と「void」である。
- void main – ANSI標準ではvoid mainは「ノー」となっており、これを使うのは間違っていると考えられる。 1633>
- int main – ‘int main’ は、関数が実行の最後にある整数を返す必要があることを意味し、プログラムの最後に0を返すことでそれを実現している。 0は「プログラムの実行が成功した」ことを示す基準です。
- main – C89では、指定されていない戻り値の型はデフォルトでintになります。 従って、mainはC89ではint mainと同等である。 しかし、C99ではこれは許されないので、int mainを使わなければならない。
だから、望ましいのはint mainである。