C の main() 関数における再帰性の制限
C では、main() 関数内での再帰の使用は重要です。議論の対象。多くの開発者は、C 標準で禁止されているにもかかわらず、GNU Compiler Collection (g ) が main() での再帰を許可していることを観察しています。
標準の制限
C 標準 (3.6.1/3)、main() での再帰は明示的に行われます。禁止:
「関数 main はプログラム内で使用してはならない (3.2)。」
「使用する」の定義
も標準「使用済み」をオブジェクトまたはオーバーロードされていない関数として定義します:
「オブジェクトまたはオーバーロードされていない関数が使用されています」その名前が潜在的に評価される式に出現する場合。
したがって、それ自体内から main() を呼び出すことは「使用」を構成するため、標準に従って許可されません。
コンパイラー動作
標準の禁止にもかかわらず、 g は次のコードをコンパイルせずにコンパイルします。 error:
int main() { main(); }
この矛盾は、 g のデフォルトの最適化レベルに、事前構成されたしきい値より小さいインライン化関数が含まれているために発生します。このコードの再帰は単一の関数呼び出しであるため、しきい値を下回る可能性が高く、 g によってインライン化されます。
結論
g は main での再帰を許可する可能性がありますが、 () 場合によっては、C 標準で厳しく禁止されています。開発者は、プログラムの正確性と潜在的な落とし穴を確保するために、標準の要件に従う必要があります。
以上がC の `main()` 関数は再帰的に使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。