• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:main関数の事についてお聞きします。)

なぜmain関数は戻り値や引数を省略して書けるのか?

このQ&Aのポイント
  • Windowsのプログラムを書く際に、main関数の戻り値や引数を省略して書くことがあります。
  • 一方、C言語で書かれたプログラムでは、main関数の書き方にはいくつかのバリエーションが存在します。
  • main関数が戻り値や引数を省略できる仕様となっている理由について、詳しく説明しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

mainは、 int main(void); int main(int argc, char *argv[]); のどちらか、またはこれらのいずれかと等価な形式でなければなりません。 (C99以降では、処理系定義の形式も認められています) ですので、返却値の型がvoidだったりすると未定義の動作になります。 昔、Cには関数原型(プロトタイプ)がありませんでした。 そのため、関数に仮引数があろうがなかろうが、呼び出し側では、単に、 int main(); と宣言するだけでした(あるいは宣言なしで呼び出していました)。 一方、返却値の型は明確に指定しなければなりません。 そのため、仮引数は融通がききますが、返却値の型は必ずintでなければならないのです。 なお、関数の宣言時に返却値の型を省略した場合、または宣言そのものを省略した場合、返却値の型はintとみなされます。 (C99以降では、こうした省略はできません)

ForceFeed
質問者

お礼

なるほど開発環境や処理系によるものだったり、昔の名残だったりするわけですね。 今は、WindowsXPで書いてますので下のコードのどちらかで書いていきます。 int main( void ) int main( int argc, char *argv[] ) ありがとうございました。

その他の回答 (2)

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.2

開発環境の違いによる「方言」です。 ちゃんとした「標準語」で書くのなら int main(int argc, char *argv[]) と書く必要が有ります。 組み込み系の開発環境では main() に渡すパラメータが無かったり、main() から戻る事を想定していない場合が有ります。 main() に渡すパラメータが無ければ main(void) になるし、 main() から戻らないのであれば void main() になります。

ForceFeed
質問者

お礼

なるほど「標準語」というのは面白いですね。 今は、WindowsXPで書いてますが、どちらかで書いていきます。 ちなみに、こっちは話し言葉でしょうか。^^ int main( void ) int main( int argc, char *argv[] ) ありがとうございました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

引数を使わないのなら、書かなくても良いです。 Windowsのプログラムでも、引数の情報を使わなくても書けるプログラムなら同じようにvoidとかでも良いはず。 int main(~) と main(~) は同じです。戻り値の型を省略するとintになるので。void main(~) はPCやサーバーで動くプログラムの場合は間違いです。

ForceFeed
質問者

お礼

なるほど開発環境や処理系によるものだったり、昔の名残だったりするわけですね。 今は、WindowsXPで書いてますので下のどちらかでコードを書いていきます。 int main( void ) int main( int argc, char *argv[] ) ありがとうございました。

関連するQ&A