>백엔드 개발 >C++ >C에서 `main()`을 재귀적으로 호출하면 정의되지 않은 동작이 발생하는 이유는 무엇입니까?

C에서 `main()`을 재귀적으로 호출하면 정의되지 않은 동작이 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-13 02:25:101011검색

Why Does Recursively Calling `main()` Lead to Undefined Behavior in C  ?

main을 호출하여 main 호출: 정의되지 않은 퀘스트

아래 코드 조각은 프로그래머들 사이에서 의문을 제기했습니다.

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

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