main() 반환 값의 의미
main() 함수의 반환 값은 프로그램이 어떤 방식으로 종료되었는지를 운영체제나 호출 환경에 알려주는 역할을 합니다.
프로그램이 정상적으로 실행을 마쳤다면 0을 반환합니다. 반대로 오류, 잘못된 입력, 세그먼테이션 폴트(segmentation fault) 등 비정상적인 종료가 발생했을 때는 일반적으로 0이 아닌 값(non-zero)을 반환합니다.
다만 0이 아닌 코드들이 구체적으로 어떻게 해석되어야 하는지에 대한 표준 규격은 존재하지 않습니다. 각 환경마다 해석 방식이 다를 수 있다는 점을 기억해 두는 것이 좋습니다.
자신만의 상태 코드 정의하기
개발자가 직접 상태 코드를 정의하고, 이를 활용해 프로그램 내에서 발생할 수 있는 다양한 실패 유형을 구분하여 표현할 수도 있습니다. 예를 들어 파일 열기 실패는 1, 메모리 부족은 2처럼 의미를 부여하면 디버깅과 자동화 스크립트 작성에 도움이 됩니다.
GCC가 권장하는 방식: EXIT_SUCCESS와 EXIT_FAILURE
GCC는 종료 신호를 보낼 때 stdlib.h(C++) 헤더에 정의된 EXIT_SUCCESS 또는 EXIT_FAILURE 매크로를 사용할 것을 권장합니다.
- EXIT_SUCCESS: 프로그램이 성공적으로 종료되었음을 나타냅니다(일반적으로 0).
- EXIT_FAILURE: 프로그램이 비정상적으로 종료되었음을 나타냅니다(일반적으로 1).
매직 넘버 대신 이러한 매크로를 사용하면 코드의 가독성과 이식성이 크게 향상됩니다.
C++에서의 특별한 규칙
C++에서는 int main() 함수 끝에 return 문을 생략할 수 있습니다. 이 경우 컴파일러가 자동으로 0을 반환하도록 처리하며, 이는 C++ 표준이 보장하는 동작입니다. 즉, main()만큼은 명시적인 return 없이도 정상 종료를 의미하게 됩니다.