Maison > développement back-end > C++ > le corps du texte

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
660 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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!