2012-07-17 4 views
0

을 비우 서로 다른 응답을주고있다 (우분투/리나 4.6.1-9ubuntu3) 4.6.1 GCC (우분투/리나 4.6.1-9ubuntu3) 4.6.1의 gcc/g ++은 ++ 내가 g을 사용하고 주요 기능

난 단지

int main(const int argc, const char *const argv[]) 
{ 

} 

를 포함하는 CPP와 C 파일을 만들고 g++ -Wall test_warnings.cpp로 컴파일하면

나는 경고를 얻을. -Wreturn 형 대신 -Wall로 사용하는 경우

test_warnings.c: In function ‘main’: 
test_warnings.c:4:1: warning: control reaches end of non-void function [-Wreturn-type] 

같은 문제가 발생한 것입니다 : 나는 gcc -Wall test_warnings.c로 컴파일하면

난 당신이 기대하는 경고를 얻을.

g ++에서 반환 값이 없다는 경고 메시지가 표시되지 않는 이유는 무엇입니까?

답변

7

C 및 C++은 다른 언어이기 때문에.

C++에서 return 문을 실행하지 않고 main()의 끝에 도달하면 return 0;을 실행하는 것과 같습니다.

C에서는 1990 ISO 표준으로 main()의 끝에서 떨어지면 호출 환경에 정의되지 않은 상태가 반환됩니다.

C99는 기본적으로 C++ 규칙을 채택하여이를 변경했지만 gcc는 기본적으로 C99를 구현하지 않습니다. (-std=c99으로 컴파일 해보십시오.)

어쨌든 main() 끝에 return 0; 문을 추가해도 문제가되지 않습니다.

+0

답변 주셔서 감사합니다! – Scooter

+0

@ 스쿠터 도움이된다면 답을 * 수락 *하십시오. –