Heim >Backend-Entwicklung >C++ >Warum führt der rekursive Aufruf von „main()' zu undefiniertem Verhalten in C?
Der folgende Codeausschnitt hat bei Programmierern Fragen aufgeworfen:
int main () { return main(); }
Es lässt sich fehlerfrei kompilieren beendet die Ausführung jedoch nicht, was zu Spekulationen über sein Verhalten führt.
Undefiniertes Verhalten: Das Rätsel von main
Gemäß dem C-Standard, [basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018 /p0689r2.html#3.6.1) besagt: „Die Funktion main darf nicht durch einen Ausdruck benannt werden.“ Dies bedeutet, dass der Aufruf von main innerhalb des Programms verboten ist.
Compiler-Verhalten: Warnungen oder Stille?
Compiler können diesen speziellen Fall unterschiedlich behandeln. GCC gibt bei aktivierter Option -pedantic eine Warnung vor der illegalen Verwendung von main aus. Visual Studio bleibt jedoch stumm und warnt nicht vor der rekursiven Natur des Codes.
Was passiert, wenn Sie main aufrufen?
Die Antwort auf diese Frage liegt im Bereich undefinierten Verhaltens. Der Standard definiert nicht, was passieren soll, wenn main innerhalb des Programms aufgerufen wird. Daher ist jedes beobachtete Verhalten unvorhersehbar und von der Implementierung abhängig.
Fazit
Der Aufruf von main innerhalb des Programms ist eine undefinierte Aktion, deren Verhalten nicht zuverlässig vorhergesagt werden kann . Compiler gehen mit diesem Fall möglicherweise anders um, indem sie Warnungen ausgeben oder die Kompilierung überhaupt nicht durchführen. Der Versuch, das Ergebnis undefinierten Verhaltens zu definieren, ist zwecklos und kann zu unerwarteten und potenziell gefährlichen Ergebnissen führen.
Das obige ist der detaillierte Inhalt vonWarum führt der rekursive Aufruf von „main()' zu undefiniertem Verhalten in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!