Maison > développement back-end > C++ > Peut-on appeler récursivement « main() » en C malgré la norme qui l'interdit ?

Peut-on appeler récursivement « main() » en C malgré la norme qui l'interdit ?

Susan Sarandon
Libérer: 2024-10-31 20:26:29
original
792 Les gens l'ont consulté

Can g   Recursively Call `main()` in C   Despite the Standard Forbidding It?

Appeler main() de manière récursive en C

La norme C dicte que l'appel de main() de manière récursive n'est pas autorisé. Cependant, le compilateur g autorise cette pratique, autorisant l'utilisation de code inhabituel tel que :

<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();
}
Copier après la connexion

Lors de l'exécution :

> g++ g.cpp; ./a.out
y = 3
y = 6
y = 7</code>
Copier après la connexion

L'examen du code assembleur révèle que main est invoqué de la même manière que toute autre fonction :

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

Bien que ce comportement ne soit pas standardisé, g semble avoir une approche détendue pour faire respecter la norme, comme en témoigne son absence d'objections. Cependant, il émet un avertissement sarcastique lors de l'utilisation de l'indicateur -pedantic :

g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal