- ベストアンサー
なぜmain関数は戻り値や引数を省略して書けるのか?
- Windowsのプログラムを書く際に、main関数の戻り値や引数を省略して書くことがあります。
- 一方、C言語で書かれたプログラムでは、main関数の書き方にはいくつかのバリエーションが存在します。
- main関数が戻り値や引数を省略できる仕様となっている理由について、詳しく説明しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
mainは、 int main(void); int main(int argc, char *argv[]); のどちらか、またはこれらのいずれかと等価な形式でなければなりません。 (C99以降では、処理系定義の形式も認められています) ですので、返却値の型がvoidだったりすると未定義の動作になります。 昔、Cには関数原型(プロトタイプ)がありませんでした。 そのため、関数に仮引数があろうがなかろうが、呼び出し側では、単に、 int main(); と宣言するだけでした(あるいは宣言なしで呼び出していました)。 一方、返却値の型は明確に指定しなければなりません。 そのため、仮引数は融通がききますが、返却値の型は必ずintでなければならないのです。 なお、関数の宣言時に返却値の型を省略した場合、または宣言そのものを省略した場合、返却値の型はintとみなされます。 (C99以降では、こうした省略はできません)
その他の回答 (2)
- tadys
- ベストアンサー率40% (856/2135)
開発環境の違いによる「方言」です。 ちゃんとした「標準語」で書くのなら int main(int argc, char *argv[]) と書く必要が有ります。 組み込み系の開発環境では main() に渡すパラメータが無かったり、main() から戻る事を想定していない場合が有ります。 main() に渡すパラメータが無ければ main(void) になるし、 main() から戻らないのであれば void main() になります。
お礼
なるほど「標準語」というのは面白いですね。 今は、WindowsXPで書いてますが、どちらかで書いていきます。 ちなみに、こっちは話し言葉でしょうか。^^ int main( void ) int main( int argc, char *argv[] ) ありがとうございました。
- notnot
- ベストアンサー率47% (4900/10358)
引数を使わないのなら、書かなくても良いです。 Windowsのプログラムでも、引数の情報を使わなくても書けるプログラムなら同じようにvoidとかでも良いはず。 int main(~) と main(~) は同じです。戻り値の型を省略するとintになるので。void main(~) はPCやサーバーで動くプログラムの場合は間違いです。
お礼
なるほど開発環境や処理系によるものだったり、昔の名残だったりするわけですね。 今は、WindowsXPで書いてますので下のどちらかでコードを書いていきます。 int main( void ) int main( int argc, char *argv[] ) ありがとうございました。
お礼
なるほど開発環境や処理系によるものだったり、昔の名残だったりするわけですね。 今は、WindowsXPで書いてますので下のコードのどちらかで書いていきます。 int main( void ) int main( int argc, char *argv[] ) ありがとうございました。