メイン関数の戻り値の型を省略できますか? [重複] 質問する

メイン関数の戻り値の型を省略できますか? [重複] 質問する

関数の宣言に関して特別なルールはありますかmain?

によるとイデオネこれは合法的な C++ です:

main()  // As opposed to int main()
{
   return 0;
}

一方、通常の関数には戻り値の型を回避する権限がないようです。

f(){} 

int main()
{
    return 0;
}

次のエラーが発生します:

prog.cpp:1:3: エラー: ISO C++ では、型なしの 'f' の宣言は禁止されています [-fpermissive] f(){} ^

mainこの場合、関数は特別なのでしょうか?

ベストアンサー1

mainの戻り値の型を省略しないでください。それは非標準です!


ワンドボックスの例:

prog.cc:1:6: 警告: ISO C++ では、型なしの 'main' の宣言は禁止されています [-Wpedantic] main()


3.6.1ドルから:

1 プログラムには、プログラムの指定開始である main と呼ばれるグローバル関数が含まれている必要があります。フリースタンディング環境のプログラムで main 関数を定義する必要があるかどうかは、実装定義です。[注: フリースタンディング環境では、起動と終了は実装定義です。起動には、静的記憶域期間を持つ名前空間スコープのオブジェクトのコンストラクタの実行が含まれ、終了には、静的記憶域期間を持つオブジェクトのデストラクタの実行が含まれます。— 注記終了] § 3.6.1 58

2 実装では、メイン関数を事前定義してはなりません。この関数はオーバーロードしてはなりません。戻り値の型はint型でなければならないただし、それ以外の場合、その型は実装定義です

おすすめ記事