문제

(저는 Visual C++ 2008을 사용하고 있습니다.) 저는 항상 main()이 다음과 같다고 들었습니다. 필수의 정수를 반환하려고 하는데 여기에는 넣지 않았습니다. return 0; 그리고 오류 0개와 경고 0개로 컴파일되었습니다!디버그 창에는 프로그램이 코드 0으로 종료되었다고 표시됩니다.이 함수의 이름이 main()이 아닌 다른 이름으로 지정되면 컴파일러는 'blah'가 값을 반환해야 한다고 불평합니다.고집 return; 또한 오류가 나타납니다.그러나 완전히 제외하면 정상적으로 컴파일됩니다.

#include <iostream>
using namespace std;

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

이것이 VC++의 버그일까요?

도움이 되었습니까?

해결책

3.6.1 주요 기능

....

2 구현은 다음을 미리 정의해서는 안 됩니다. main 기능.이 기능은 과부하되어서는 안 됩니다.반환 유형은 다음과 같습니다. int, 그렇지 않은 경우 해당 유형은 구현에 따라 정의됩니다.모든 구현에서는 다음과 같은 main 정의를 모두 허용해야 합니다.

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

그리고

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

....그리고 계속해서 추가됩니다...

5A return 성명서 main 기본 기능을 종료하고(자동 저장 기간이 있는 모든 객체 삭제) 호출하는 효과가 있습니다. exit 반환 값을 인수로 사용합니다. 제어가 종료된 경우 main return 문을 만나지 않으면 return 0을 실행하는 효과가 나타납니다.;

이 구절을 인용하기 위해 C++ 표준의 온라인 사본을 찾으려고 했습니다. 나는 내가 할 수 있는 것보다 모든 올바른 부분을 더 잘 인용하는 블로그 게시물을 발견했습니다.

다른 팁

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

나는 VC++가 메인 함수에 return 0을 포함하지 않으면 return 0을 삽입할 것이라고 확신합니다.함수에서도 같은 일이 발생할 수 있지만 이러한 경우에는 최소한 경고가 표시됩니다.

섹션 6.6.3/2에서는 "함수의 끝에서 흘러나오는 것은 값이 없는 반환과 같습니다.이로 인해 값 반환 함수에서 정의되지 않은 동작이 발생합니다."

예는 기껏해야 VS 2010/g++에 대한 경고를 제공하는 아래 코드입니다.

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

int main(){
   f();
}

따라서 요점은 이전 응답에서 지적한 것처럼 '메인'이 특별하다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top