ホームページ >バックエンド開発 >C++ >C で「main」関数は自分自身を再帰的に呼び出すことができますか?

C で「main」関数は自分自身を再帰的に呼び出すことができますか?

DDD
DDDオリジナル
2024-12-18 18:52:11186ブラウズ

Can the `main` Function Recursively Call Itself in C  ?

C で main 関数自体を呼び出すことはできますか?

問題:

次のコードはエラーなしでコンパイルされますが、無限に入ります。ループ:

int main() {
    return main();
}

答え:

C で main 関数をその内部から呼び出すと、未定義の動作が発生します。未定義の動作とは、次のようなあらゆることが起こる可能性があることを意味します。

  • プログラムがクラッシュする可能性があります。
  • プログラムが永久に実行される可能性があります。
  • プログラムがメモリを破損する可能性があります。
  • >

C 標準では、main 関数の名前を式で指定してはならないと明示的に規定されています。 main が自身を呼び出すとき、コンパイラはコードをコンパイルするのではなく、診断メッセージを発行する必要があります。

この標準要件にもかかわらず、一部のコンパイラは診断メッセージを発行せず、プログラムのコンパイルを許可しない場合があります。ただし、このようなプログラムを実行すると、未定義の動作が呼び出されます。

コンパイラの動作:

コンパイラは、メインの実行を禁止するルールを含め、C 標準のすべてのルールを強制する必要はありません。自分自身を呼んでいます。警告やエラーが発行される場合がありますが、実際の動作はコンパイラやコンパイラ設定によって異なります。

影響:

C では main を再帰的に呼び出すことはできません。コンパイラーがそれを許可していても、プログラムは未定義の動作を示すため、依存すべきではありません。

以上がC で「main」関数は自分自身を再帰的に呼び出すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。