Der C-Standard beschreibt die Hauptfunktion als grundlegenden Einstiegspunkt für jedes Programm. Es stellt sich jedoch die Frage: „Ist es möglich, main() aus sich selbst heraus aufzurufen?“
Gemäß dem C-Standard nein. Sobald die Hauptfunktion definiert und ausgeführt ist, markiert sie den Anfang und das Ende des Programms. Der rekursive Aufruf von main() verstößt gegen dieses Grundprinzip.
In der Praxis erlauben bestimmte Compiler wie Linux g den unkonventionellen Aufruf von main() innerhalb von main(). Dieses Verhalten wird vom Standard nicht explizit unterstützt, ist aber durch die Compiler-Implementierung zulässig.
Betrachten Sie beispielsweise den folgenden Code:
<code class="c++">#include <iostream> #include <cstdlib> using namespace std; int main() { int y = rand() % 10; // random number generation cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
Dieser Code führt eine Zufallszahlengenerierung durch, und wenn die Wenn die generierte Zahl ungleich 7 ist, wird main() rekursiv aufgerufen.
Eine Untersuchung des von g generierten Assemblercodes zeigt, dass main() wie jede andere Funktion aufgerufen wird :
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
Es ist erwähnenswert, dass g beim Kompilieren solchen Codes eine Warnung mit dem Flag -pedantic generiert, um Sie daran zu erinnern, dass er gegen den C-Standard verstößt:
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Obwohl der Aufruf von main() in sich selbst in manchen Situationen funktionieren kann, ist er vom C-Standard nicht offiziell sanktioniert. Dies stellt einen Verstoß gegen das Standardverhalten dar und kann auf verschiedenen Compilern und Plattformen zu undefinierten Ergebnissen führen. Daher wird dringend davon abgeraten, sich im Produktionscode auf diese unkonventionelle Vorgehensweise zu verlassen.
Das obige ist der detaillierte Inhalt vonKönnen Sie main() in C rekursiv aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!