ホームページ > バックエンド開発 > C++ > `main()` は常に C プログラムの実行の真の開始をマークしますか?

`main()` は常に C プログラムの実行の真の開始をマークしますか?

Patricia Arquette
リリース: 2024-12-05 09:55:15
オリジナル
675 人が閲覧しました

Does `main()` Always Mark the True Beginning of a C   Program's Execution?

Is main() 本当に C プログラムの開始点ですか?

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;
}
ログイン後にコピー

このコードは、意図された目的を達成しています。つまり、正方形を出力します。ただし、不可解な点は、関数 user_main() が main() よりも前に実行されるという事実にあります。プログラムの出発点。 GCC 4.5.0 を使用して -pedantic オプションを指定してこのコードをコンパイルしても、エラーや警告は発生しません。

この観察により、「このコードは標準に準拠していますか?」という疑問が生じます。

この質問に答えるには、次のようにします。 「プログラムの開始」という言葉の意味をさらに深く掘り下げる必要があります。規格では、この用語を規格自体のコンテキストに合わせて特別に定義しています。 main() の前にコードを実行できないというわけではありません。代わりに、プログラムの先頭が main() の開始点であることが確立されます。

このコード例の場合、定義に従って、プログラムが「開始」する前に user_main() が実行されます。標準によって提供されます。したがって、このコードは完全に準拠しています。設計上、この例を含め、重要なコードは main() が呼び出される前に実行されることがよくあります。

したがって、標準の定義を誤解することで誤解が生じます。標準の議論のために、プログラムが「開始」する前に user_main() が実行され、この動作は引き続き標準に完全に準拠しています。

以上が`main()` は常に C プログラムの実行の真の開始をマークしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート