しばしば指摘されるように、main関数の型は、絶対にintでなければなりません。
理由は、「規格でそう決められているから」だそうです。
そのくせ、現実的には、mainがvoidになっているソースでも、普通にコンパイルできてしまったりするわけで(少なくとも、LSI-CとBCC32はそう)、正直、なんだかよくわかりません。
こればっかりは、個人の側で気をつけるしかないようです。
愚痴ってるだけでは芸がないので、簡単な実験をしてみました。
具体的には、リスト1,2,3,4,5,6,7のプログラムを材料として、mainがintの場合とvoidの場合で、結果に違いがあるのかを比較しました(コンパイラはLSI-C)。
まず、
リスト1
の実験で、1つの関数のなかに書ける行数は、mainがintでもvoidでも違いはありませんでした(return行の分を除く)。
リスト2
に関する結果は、リスト1と同様。
リスト3
の実験では、voidのほうが3行ほど多く記述できるという結果になりました(return行の分を差し引きすると4行の差)。
リスト4
の実験では、細かい数値とかエラーの内容に若干の差はあったものの、全体の傾向はintもvoidも同じ。
リスト5
の実験では、mainがintの場合は、1階層目でのスタック残量が2バイトほど少ないという、当然の結果になりました(その分だけ2階層目も減少)。
リスト6
と
リスト7
に関する結果は、リスト4と同様でした。
全体としてみると、この程度のプログラムなら、mainがvoidでもあんまり影響はないようです。
とはいうものの、コンパイラが違えば結果も変わるかもしれないし、本当のところはよくわかりません。