C의 Recursive Calls of Main: A Journey into Un Defined Territory
아래 제시된 당황스러운 코드 조각은 프로그래밍 커뮤니티 내에서 호기심을 불러일으켰습니다.
int main () { return main(); }
많은 사람들이 놀랍게도 이 코드는 성공적으로 컴파일됩니다. 그러나 실행을 보면 흥미로운 동작이 드러납니다. 즉, 무한정 실행됩니다. 이 특이한 관찰은 기본 메커니즘에 대한 의문을 불러일으켰습니다.
Main 호출의 딜레마
C 표준은 [basic.start.main] p3에서 " main 함수는 표현식으로 이름을 지정해서는 안 됩니다." 이러한 금지는 런타임 라이브러리가 한 번 호출하는 프로그램의 진입점인 main의 특성에서 비롯됩니다. main에 대한 후속 호출은 허용되지 않으므로 명명된 표현식이 부족합니다.
컴파일러 동작 및 정의되지 않은 동작
[intro.compliance.general]에 따르면 컴파일러의 의무는 잘 구성된 프로그램에서 실행 가능한 코드를 생성하는 것입니다. 경고나 오류가 표시될 수 있지만 모든 규칙을 적용할 필요는 없습니다. 이 특별한 경우 컴파일러는 main 호출 위반에 대해 다르게 대응할 재량권을 갖습니다.
Embrace the Unknown
궁극적으로 이 동작에 대한 결정적인 판결은 다음과 같습니다. 코드 조각은 정의되지 않은 동작 영역 내에 있습니다. 표준 정의에 따르면 정의되지 않은 동작이 발생하면 어떤 일이든 일어날 수 있습니다. 결과는 전혀 예측할 수 없기 때문에 그러한 결과를 합리화하려는 시도는 소용이 없습니다.
결론적으로 제시된 코드의 구문은 유효하지만 실행 결과 정의되지 않은 동작이 발생합니다. 프로그램이 예측할 수 없는 미지로의 여행을 시작하지 않도록 main을 호출하는 명명된 표현식에 대한 표준 금지 사항에 유의하는 것이 가장 좋습니다.
위 내용은 C에서 'main()'을 반복적으로 호출하면 정의되지 않은 동작이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!