¿Está permitido en "C++"? No.
En la práctica, ¿puede llamar al main()
? Sí.
Independientemente de lo que diga el Estándar C++, eso no impide que el compilador Linux g ++ compile código con main()
en main()
.
#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();
}
Lo que nos permite hacer:
> g++ g.cpp; ./a.out
y = 3
y = 6
y = 7
Mirando a la asamblea, vemos que el principal se llama igual que cualquier otra función sería:
main:
...
cmpl $7, -12(%rbp)
je .L7
call main
...
.L7:
...
leave
ret
No es que este comportamiento está garantizado, pero parece que a g ++ no parece importarle realmente el estándar, aparte de esta advertencia sarcástica con -pedantic
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
Si desea obtener un puntero de función o algo a la función actual, no creo que eso sea posible. –
Eso es recursión infinita ... puede compilar, pero "funciona" no es del todo correcto. –
Como comentario, POR FAVOR, no comenten cosas obvias. ¡Debería ser obvio que esa línea imprime !!! ¡Hola mundo! – Joe