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(); }
Lors de l'exécution :
> g++ g.cpp; ./a.out y = 3 y = 6 y = 7</code>
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>
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'
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!