C에서 main()을 재귀적으로 호출할 수 있습니까?
아래 코드 조각은 C에서 main()을 재귀적으로 호출하는 흥미로운 동작을 보여줍니다. .
<code class="cpp">#include <iostream> #include <cstdlib> int main() { std::cout << "!!!Hello World!!!" << std::endl; system("pause"); return main(); }</code>
코드가 성공적으로 컴파일되고 실행되면 "Hello World!!!"가 표시됩니다. 무기한. 그러나 이 동작은 C의 표준을 준수하지 않는다는 점에 유의하는 것이 중요합니다. C 표준에서는 main()을 반복적으로 호출하거나 해당 주소를 가져오는 것을 명시적으로 금지합니다.
그러나 실제로 Linux g 컴파일러와 같은 일부 컴파일러에서는 main()에서 main()이 호출되는 것을 허용합니다. 이러한 허용성은 다음 코드에서 분명하게 나타납니다.
<code class="cpp">#include <cstdlib> #include <iostream> using namespace std; int main() { int y = rand() % 10; cout << "y = " << y << endl; return (y == 7) ? 0 : main(); }</code>
이 코드가 실행되면 일련의 "y" 값(예: 3, 6, 7)이 생성됩니다. 각 값은 main()에 대한 후속 호출에서 생성됩니다. .
컴파일된 어셈블리를 분석하면 main()이 다른 함수와 마찬가지로 호출된다는 사실이 드러납니다.
<code class="assembly">main: ... cmpl , -12(%rbp) je .L7 call main ... .L7: ... leave ret</code>
표준의 금지에도 불구하고 g는 이러한 호출을 허용하는 것 같습니다. 그러나 이 동작은 보장되지 않으며 프로그래머는 이식성과 C 표준 준수를 보장하기 위해 이에 의존하지 않아야 합니다.
위 내용은 C에서 `main()`을 재귀적으로 호출하는 것이 허용됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!