Heim  >  Artikel  >  Backend-Entwicklung  >  Kann sich die Funktion main() in C selbst aufrufen?

Kann sich die Funktion main() in C selbst aufrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 00:09:02903Durchsuche

Can the main() function call itself in C  ?

Rekursion in der Funktion main(): Ein unerwartetes Compilerverhalten

Aufrufe der Funktion main() sind in C im Allgemeinen nicht zulässig. In der Praxis kann dies jedoch auf einigen Plattformen möglich sein, insbesondere auf Linux-Systemen mit dem g-Compiler. Sehen wir uns genauer an, wie dieses Verhalten erreicht wird.

Im bereitgestellten Codebeispiel:

<code class="cpp">#include <iostream>
#include <cstdlib>

int main() {
    cout << "!!!Hello World!!!" << endl;
    system("pause");
    return main();
}</code>

Der Aufruf von main() innerhalb der main()-Funktion ermöglicht eine Endlosschleife. Dies ist jedoch kein Standard-C-Verhalten.

Compiler-Magie oder undefiniertes Verhalten?

Ist es möglich, die aktuell laufende Funktion mithilfe einer magischen Variablen oder eines Makros abzurufen? Nein, eine solche Bestimmung gibt es im C-Standard nicht.

Linux-Compiler-Ausnahme

Trotz des Verbots des Standards kompiliert der Linux-g-Compiler Code mit darin enthaltenen main()-Aufrufen main() ohne Fehler auszulösen. Dies liegt an der nachsichtigen Interpretation des C-Standards durch den Compiler.

Praktische Demonstration

Berücksichtigen Sie den folgenden Code:

<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 mit g generiert dieser Code einen Assemblercode, der wie folgt aussieht:

<code class="assembly">main:
        ...
        cmpl    , -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret</code>

In diesem Assemblercode wird main wie jede andere Funktion aufgerufen. Der Aufruf von main() in der Funktion main() wird in einen regulären Funktionsaufruf übersetzt.

Fazit

Während der Aufruf von main() aus main() heraus erfolgt Obwohl dies im C-Standard nicht zulässig ist, ist dies möglicherweise auf bestimmten Plattformen mit bestimmten Compilern möglich, die ein solches Verhalten tolerieren. Es ist jedoch wichtig zu betonen, dass dies kein Standard-C ist und in verschiedenen Umgebungen oder Compilerversionen zu unerwarteten Ergebnissen führen kann.

Das obige ist der detaillierte Inhalt vonKann sich die Funktion main() in C selbst aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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