低レベルなヒトの覚え書き

●余談、のようなもの


3. mainの型

しばしば指摘されるように、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でもあんまり影響はないようです。 とはいうものの、コンパイラが違えば結果も変わるかもしれないし、本当のところはよくわかりません。

→トップ


R.2: 2006/08/01
Copyright (C) 2005,2006 A.Satoshi