2008-08-22 6 views
33

(저는 Visual C++ 2008을 사용하고 있습니다) 항상 main()이 이 필요하다는 것을 들었습니다.은 정수를 반환하지만 여기서는 return 0;을 넣지 않았으며 0 오류와 0 경고로 컴파일되었습니다! 디버그 창에서 프로그램이 코드 0으로 종료되었습니다.이 함수의 이름이 main()이 아닌 경우 컴파일러는 'blah'가 값을 반환해야한다고 말하는 것에 불평합니다. return;을 붙이면 오류가 나타납니다. 그러나 그것을 완전히 버려두면 잘 컴파일됩니다.int main() {}이 왜 컴파일됩니까?

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Hey look I'm supposed to return an int but I'm not gonna!\n"; 
} 

이것은 VC++의 버그 일 수 있습니까?

답변

69

3.6.1 주요 기능

는 ....

2 구현은 main 함수를 미리 정의되지 않는다. 이 함수는 과부하되지 않아야한다. 반환 유형은 int이어야하지만, 그렇지 않으면 유형이 구현 정의됩니다.

5 main에서 return 문이 ...

int main() { /* ... */ } 

int main(int argc, char* argv[]) { 
/* ... */ 
} 

....하고 계속 추가를 모든 구현은 메인의 다음과 같은 정의를 모두 허용해야한다 main 함수를 떠나는 (자동 저장 기간을 가진 객체를 파기하는) 효과와 반환 값을 인수로 사용하여 exit을 호출하는 효과. 제어가 return 문과 일치하지 않고 main의 끝에 도달하면 결과는 return 0; 그래서 나는이 구절을 인용 할 수있는 C++ 표준의 온라인 사본을 찾기 위해 시도

I found a blog post that quotes all the right bits better than I could.

+0

g ++에서이 작업을 수행 할 때 기본적으로 오류가 발생합니다. 대부분의 다른 컴파일러는 대신 "return 0"을 수행합니다. – wakingrufus

+3

main()에 return 문이 없으면 이전 버전의 GCC가 실제로 일부 인스턴스에서 가비지를 반환했습니다. –

+9

@ wakingrufus, 어떤 g ++ 버전을 사용하고 있습니까? sparkes에서 설명한대로 올바른 동작을 얻고 있습니다. – Kevin

3

VC++에서는 주요 기능을 포함하지 않으면 return 0을 삽입합니다. 함수에서도 똑같은 일이 발생할 수 있지만, 적어도 이러한 경우에는 경고가 발생합니다.

+5

void가 아닌 함수의 끝에서 벗어나는 정의되지 않은 동작입니다. main 만 암시 적 리턴과 함께 특별합니다. –

17

이것은 C++ 언어 표준의 일부입니다. main에 명시 적 return 문이 없으면 암시 적 return 0이 생성됩니다.

1

함수의 끝을 흐르는 6.6.3/2 states-은 "아니오 반환에 해당 섹션 값을 반환하는 함수에서 정의되지 않은 동작이 발생합니다. "

예는 그래서 요점이 이전 응답이 지적한대로 '주'가 특별한 점이다 최고의 VS 2010

int f(){ 
    if(0){ 
     if(1) 
     return true; 
    } 
} 

int main(){ 
    f(); 
} 

/g ++

경고를주는 아래의 코드입니다.

관련 문제