ホームページ > バックエンド開発 > C++ > C で「main()」を再帰的に呼び出すと未定義の動作が発生するのはなぜですか?

C で「main()」を再帰的に呼び出すと未定義の動作が発生するのはなぜですか?

Patricia Arquette
リリース: 2024-12-13 02:25:10
オリジナル
1023 人が閲覧しました

Why Does Recursively Calling `main()` Lead to Undefined Behavior in C  ?

main を呼び出して main を呼び出す: 未定義のクエスト

以下のコード スニペットはプログラマの間で疑問を引き起こしました:

int main () { 
    return main(); 
}
ログイン後にコピー

エラーなしでコンパイルされますしかし、実行の終了に失敗するため、その動作についての憶測が生まれます。

未定義動作: main の謎

C 標準によると、[basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers) /2018/p0689r2.html#3.6.1) には、「関数 main には式によって名前を付けることはできません」と記載されています。これは、プログラム内で main を呼び出すことが禁止されていることを意味します。

コンパイラーの動作: 警告または沈黙?

コンパイラーは、この特定のケースを異なる方法で処理する場合があります。 GCC は、-pedantic オプションを有効にすると、main の不正な使用に関する警告を発行します。ただし、Visual Studio は沈黙を保ち、コードの再帰的な性質について警告しないことを選択します。

main を呼び出すと何が起こりますか?

この質問に対する答え未定義の動作の範囲内にあります。標準では、プログラム内で main が呼び出されたときに何が起こるべきかは定義されていません。その結果、観察される動作はすべて予測不可能であり、実装に依存します。

結論

プログラム内での main の呼び出しは未定義のアクションであり、その動作を確実に予測することはできません。 。コンパイラーはこのケースを別の方法で処理し、警告を発行したり、コンパイルを完全に失敗したりする場合があります。未定義の動作の結果を定義しようとしても無駄であり、予期しない潜在的に危険な結果につながる可能性があります。

以上がC で「main()」を再帰的に呼び出すと未定義の動作が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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