>  기사  >  백엔드 개발  >  표준에서 금지하고 있음에도 불구하고 C에서 'main()'을 재귀적으로 호출할 수 있나요?

표준에서 금지하고 있음에도 불구하고 C에서 'main()'을 재귀적으로 호출할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 20:26:29658검색

Can g   Recursively Call `main()` in C   Despite the Standard Forbidding It?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.