C 표준은 모든 프로그램의 기본 진입점으로 main 함수를 설명합니다. 그러나 "main() 자체를 내부에서 호출하는 것이 가능한가?"라는 질문이 생깁니다.
C 표준에 따르면 no. 일단 정의되고 실행되면 main 함수는 프로그램의 시작과 끝을 표시합니다. main()을 재귀적으로 호출하는 것은 이 기본 원칙을 위반하는 것입니다.
그러나 실제로 Linux의 g와 같은 특정 컴파일러는 main() 내에서 main()의 색다른 호출을 허용합니다. 이 동작은 표준에서 명시적으로 지원되지는 않지만 컴파일러 구현에서는 허용됩니다.
예를 들어 다음 코드를 고려하세요.
<code class="c++">#include <iostream> #include <cstdlib> using namespace std; int main() { int y = rand() % 10; // random number generation cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
이 코드는 난수 생성을 수행합니다. 생성된 숫자가 7이 아니면 main()을 재귀적으로 호출합니다.
g에 의해 생성된 어셈블리 코드를 조사하면 main()이 다른 함수와 마찬가지로 호출된다는 것을 알 수 있습니다 :
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
g가 이러한 코드를 컴파일하는 동안 C 표준을 위반한다는 사실을 상기시키기 위해 -pedantic 플래그와 함께 경고를 생성한다는 점에 주목할 가치가 있습니다.
g.cpp:8: error: ISO C++ forbids taking address of function '::main'
main() 자체 호출은 일부 상황에서 작동할 수 있지만 C 표준에서 공식적으로 승인한 것은 아닙니다. 이는 표준 동작을 위반하는 것이며 다양한 컴파일러와 플랫폼에서 정의되지 않은 결과를 초래할 수 있습니다. 따라서 프로덕션 코드에서 이러한 색다른 관행에 의존하는 것은 강력히 권장되지 않습니다.
위 내용은 C에서 main()을 재귀적으로 호출할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!