C에서 main()을 재귀적으로 호출
C 표준에서는 main()을 재귀적으로 호출하는 것이 허용되지 않는다고 규정하고 있습니다. 그러나 g 컴파일러는 이 방법을 허용하여 다음과 같은 특이한 코드를 허용합니다.
<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(); }
실행 시:
> g++ g.cpp; ./a.out y = 3 y = 6 y = 7</code>
어셈블리 코드를 조사하면 main이 다른 함수와 유사하게 호출된다는 것을 알 수 있습니다. :
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
이러한 행동은 표준화되어 있지 않지만 g는 이의가 없다는 점에서 알 수 있듯이 표준 시행에 대해 여유로운 접근 방식을 보이는 것으로 보입니다. 그러나 -pedantic 플래그를 사용하면 냉소적인 경고가 표시됩니다.
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
위 내용은 표준에서 금지하고 있음에도 불구하고 C에서 'main()'을 재귀적으로 호출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!