Разрешено ли в "C ++"? Нет.
На практике, вы можете позвонить main()
? Да.
Что бы ни говорил стандарт C ++, это не мешает компилятору Linux g ++ компилировать код с main()
в 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();
}
Что позволяет нам делать:
> g++ g.cpp; ./a.out
y = 3
y = 6
y = 7
Глядя на сборку, мы видим, что main вызывается так же, как и любая другая функция:
main:
...
cmpl $7, -12(%rbp)
je .L7
call main
...
.L7:
...
leave
ret
Не то чтобы это поведение гарантировалось, но похоже, что g ++, похоже, не особо заботится о стандарте, кроме этого саркастического предупреждения с -pedantic
g.cpp:8: error: ISO C++ forbids taking address of function '::main'