Main() は本当に C プログラムの開始点ですか?
C 標準では、main() をプログラムの排他的な開始点として定義しています。プログラム: 「プログラムには、プログラムの開始点として指定される 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; }
驚くべきことに、このコードは、最初の実行ポイントであるはずの main() に入る前に user_main() 関数を実行します。さらに、コードはエラーや警告なしでコンパイルされます。
プログラムの「開始」の定義
「プログラムの開始」という用語を正しく解釈することが重要です。標準では、開始を、必ずしも最初のコードの実行時ではなく、プログラムが開始するとみなされる時点として定義しています。
この例では、プログラムは main() で始まりますが、これはコードが存在しないことを意味するものではありません。事前に実行します。実際には、通常、実質的なコードは main() よりも前に、特に初期化中に実行されます。
標準準拠
コードの実行順序は通常ではありませんが、コードは完全に準拠しています。標準。定義によれば、user_main() の方が先に実行されますが、プログラムの開始は main() になります。実行順序によって、プログラムの開始が main() 関数として定義されるという事実は変わりません。
したがって、指定されたコードは標準に準拠しており、開始の標準の定義が無効になることはありません。プログラムを main() として実行します。
以上が`main()` は本当に C プログラムで最初に実行されるコードですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。