Rekursivitätseinschränkungen in der main()-Funktion von C
In C wurde die Verwendung der Rekursion innerhalb der main()-Funktion a Gegenstand der Debatte. Zahlreiche Entwickler haben beobachtet, dass die GNU Compiler Collection (g) trotz des angeblichen Verbots im C-Standard eine Rekursion in main() zulässt.
Standardeinschränkungen
Gemäß der C-Standard (3.6.1/3), Rekursion in main() ist ausdrücklich verboten:
"Die Funktion main darf nicht verwendet werden (3.2) innerhalb eines Programms.“
Definition von „Verwendet“
Der Standard definiert „verwendet“ auch als Objekt oder nicht überladene Funktion:
"Ein Objekt oder eine nicht überladene Funktion wird verwendet, wenn ihr Name in einem potenziell ausgewerteten Element erscheint Ausdruck.“
Daher stellt der Aufruf von main() aus sich selbst eine „Verwendung“ dar und ist daher gemäß dem Standard nicht zulässig.
Compilerverhalten
Trotz des Verbots des Standards kompiliert g den folgenden Code ohne Fehler:
int main() { main(); }
Diese Diskrepanz entsteht, weil die Standardoptimierungsstufe von g Inlining-Funktionen umfasst, die kleiner als ein vorkonfigurierter Schwellenwert sind. Da es sich bei der Rekursion in diesem Code um einen einzelnen Funktionsaufruf handelt, fällt sie wahrscheinlich unter den Schwellenwert und wird von g eingebunden.
Schlussfolgerung
Während g möglicherweise eine Rekursion in main zulässt () In einigen Fällen verbietet der C-Standard dies strengstens. Entwickler sollten sich an die Anforderungen des Standards halten, um die Korrektheit des Programms und mögliche Fallstricke sicherzustellen.
Das obige ist der detaillierte Inhalt vonKann die Funktion „main()' von C rekursiv sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!