以下のコード スニペットはプログラマの間で疑問を引き起こしました:
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 サイトの他の関連記事を参照してください。