C ++標準のセクション$ 3.6.1 / 1は、
プログラムには、プログラムの指定された開始点であるmainと呼ばれるグローバル関数が含まれます。
今、このコードを考えて、
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
このサンプルコードは、私が意図することを実行します。つまり、プログラムの「開始」であるはずの関数に入る前に、0から9の整数の2乗を出力しますmain()
。
また-pedantic
、GCC 4.5.0オプションでコンパイルしました。エラーも警告もありません!
だから私の質問は、
このコードは本当に標準に準拠していますか?
それが標準に準拠している場合、それは標準が言うことを無効にしないのですか?main()
このプログラムの開始ではありません!user_main()
の前に実行されmain()
ます。
グローバル変数を初期化するには、最初main_ret
にをuse_main()
実行しますが、それはまったく別のことです。ポイントは、そのあるんとして、$ 3.6.1 / 1標準からの引用文を無効にmain()
しないで起動プログラムの。それは実際には最後のこのプログラム!
編集:
「スタート」という言葉をどのように定義しますか?
これは、「プログラムの開始」というフレーズの定義に要約されます。それでは、どのように正確に定義しますか?
main()
として十分に正当化できる非常に重要なポイントだと思います