2013-08-27 1 views
1
#include <iostream> 

int main() 
{ 
    main(); 
    std::cout<<"Hello World! "<<std::endl; 
    return 0; 
} 

이것은 어떻게 동작합니까? 왜?main() 함수가 C++에서 자신을 호출하면 어떻게됩니까?

+2

실행 해 보셨습니까? – Sambuca

+0

main과 다른 함수가 있다면 스택 오버플로가 발생하여 프로그램이 중단 될 수 있습니다. – Simon

+0

@Sambuca :이 경우 실행하면 스택 오버플로가 발생할 수 있습니다. 그러나 "스택 오버플로"는 이에 대한 실제 답변이 아닙니다. –

답변

7

이것은 정의되지 않은 동작입니다. C++ 프로그램 (표준의 섹션 3.6.1.3) 내에서 main()을 호출 할 수 없습니다.

따라서 어떤 일이 발생할 수 있습니다. 그리고 이유를 물을 필요가 없습니다.

1

C++의 경우 main()은 (는) 호출 할 수 없습니다. 그래서 그것은 오류입니다. 그 주소를 취하는 것조차 오류입니다.

3

main() 함수는 C++에서 자체를 호출합니다. 어떻게됩니까?

정의되지 않은 동작이므로 아무런 문제가 발생할 수 없습니다. 그러나 프로그램이 현재 서 있기 때문에 일부 무한 재귀 (결국 스택 오버플로)가 합리적인 것처럼 보입니다.

3

주 내부에서 메인을 호출하면 안됩니다. 정의되지 않은 동작입니다.

§ 5.2.2.9 함수 호출

재귀 호출은 메인라는 기능 (3.6.1)를 제외하고 허용됩니다.

§ 3.6.1

main 함수는 프로그램 내에서 사용되지 않는다. main의 링키지 (3.5)는 구현에 따라 정의됩니다. 메인을 삭제 된 것으로 정의하거나 메인이 인라인, 스태틱, 또는 constexpr로 선언하는 프로그램은 불성이다. main이라는 이름은 다른 방법으로 예약되어 있지 않습니다. [예 : 멤버 함수, 클래스 및 열거 형은 다른 네임 스페이스의 엔터티와 마찬가지로 main이라고도합니다. -end example]

0

main()에는 엔트리 포인트가 하나만 있습니다. 따라서, 다시 호출 할 수 없습니다.

+1

'main()'**은 ** 진입 점입니다. – lapk

관련 문제