Hauptfunktion rekursiv in C aufrufen
Das Code-Snippet stellte Versuche bereit, die Funktion main() in sich selbst rekursiv in C aufzurufen. Es ist jedoch wichtig zu beachten, dass dieses Verhalten bei strikter C-Konformität nicht zulässig ist.
Ist der rekursive Aufruf von main() in C zulässig?
Gemäß dem C-Standard , kann sich eine Funktion nicht selbst direkt aufrufen, auch nicht die Funktion main(). Diese Einschränkung soll eine unendliche Rekursion verhindern und den Programmabbruch garantieren.
Praktische Umsetzung mit g
Trotz des Sprachstandards ist es in der Praxis möglich, main() rekursiv aufzurufen mit dem GNU C-Compiler (g). g setzt den Standard in dieser Hinsicht nicht strikt durch und ermöglicht das Kompilieren und Ausführen von Code mit rekursiven main()-Aufrufen.
Beispielcode
Der folgende geänderte Codeausschnitt demonstriert rekursive main()-Aufrufe mit g:
<code class="cpp">#include <cstdlib> #include <iostream> using namespace std; int main() { int y = rand() % 10; // returns 3, then 6, then 7 cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
Beim Kompilieren und Ausführen generiert dieser Code die folgende Ausgabe:
y = 3 y = 6 y = 7
Assembly-Analyse
Eine Untersuchung der für diesen Code generierten Assembly zeigt, dass g rekursive main()-Aufrufe wie jeden anderen Funktionsaufruf behandelt:
main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret
Hinweis:
While Dieses Verhalten ist mit g möglich. Es ist wichtig zu beachten, dass es nicht garantiert ist. Andere Compiler halten sich möglicherweise strikt an den C-Standard, was zu Kompilierungsfehlern oder unerwartetem Verhalten führen kann. Daher wird die Verwendung rekursiver main()-Aufrufe nicht empfohlen.
Das obige ist der detaillierte Inhalt vonIst der rekursive Aufruf von „main()' in C erlaubt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!