아래 코드 조각은 프로그래머들 사이에서 의문을 제기했습니다.
int main () { return main(); }
오류 없이 컴파일됩니다. 그러나 실행을 종료하지 못하여 이에 대한 추측이 발생합니다. 동작.
정의되지 않은 동작: 메인의 수수께끼
C 표준에 따르면, [basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0689r2.html#3.6.1)에서는 "main 함수의 이름을 지정할 수 없습니다. 표현으로요." 이는 프로그램 내에서 main 호출이 금지됨을 의미합니다.
컴파일러 동작: 경고 또는 침묵?
컴파일러는 이 특정 사례를 다르게 처리할 수 있습니다. -pedantic 옵션이 활성화된 GCC는 main의 불법 사용에 대한 경고를 발행합니다. 그러나 Visual Studio는 코드의 재귀적 특성에 대해 경고하지 않기로 결정하고 침묵을 유지합니다.
main을 호출하면 어떻게 되나요?
이 질문에 대한 답변 정의되지 않은 동작의 영역에 있습니다. 표준은 프로그램 내에서 main이 호출될 때 어떤 일이 발생해야 하는지 정의하지 않습니다. 결과적으로 관찰된 동작은 예측할 수 없으며 구현에 따라 다릅니다.
결론
프로그램 내에서 main을 호출하는 것은 정의되지 않은 동작이며 해당 동작을 안정적으로 예측할 수 없습니다. . 컴파일러는 이 경우를 다르게 처리하여 경고를 발행하거나 완전히 컴파일하지 못할 수 있습니다. 정의되지 않은 동작의 결과를 정의하려는 시도는 소용이 없으며 예상치 못한 잠재적으로 위험한 결과를 초래할 수 있습니다.
위 내용은 C에서 `main()`을 재귀적으로 호출하면 정의되지 않은 동작이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!