Heim > Backend-Entwicklung > C++ > Hauptteil

Können Sie main() in C rekursiv aufrufen?

Susan Sarandon
Freigeben: 2024-11-02 20:45:02
Original
300 Leute haben es durchsucht

Can You Call main() Recursively in C  ?

Aufruf von main() in sich selbst in C

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?“

Funktionale Einschränkungen

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.

Praktische Implementierung

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>
Nach dem Login kopieren

Dieser Code führt eine Zufallszahlengenerierung durch, und wenn die Wenn die generierte Zahl ungleich 7 ist, wird main() rekursiv aufgerufen.

Analyse auf Assemblerebene

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>
Nach dem Login kopieren

Compiler-Warnung

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'
Nach dem Login kopieren

Fazit

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage