Home main 함수는 왜 int 타입일까?
Post
Cancel

main 함수는 왜 int 타입일까?

C나 C++을 배웠거나 printf(“Hello World”)처럼 한번이라도 맛본 사람이라면 알텐데 C와 C++은 main 함수에서 시작된다 이것은 여타 다른 언어들도 비슷하니 별 생각이 들지 않지만

문득 왜 C와 C++에서 main 함수의 타입은 int로 정수를 리턴할까? 라는 궁금증이 생겨 다른 사람도 혹시 이런 궁금증을 가지지 않을까? 라는 생각으로 이 글을 작성해보았다

정수 타입을 사용하는 이유

종료 상태 반환

1
2
3
4
5
6
7
8
#include <stdio.h>


int main(){
    

    return 0;
}

혹여나 모르는 사람이 있을 수도 있는데 프로그램이 종료될 때 main 함수는 실행이 성공적이었는지 아니면 오류가 있었는지를 나타내는 종료 상태를 반환하는데 이 값을 정수 형태로 일반적으로 0은 성공을 뜻하고 0이 아닌 값은 오류나 특정 종류의 실패를 뜻한다

C 언어가 최초로 개발되었을 때 main 함수의 반환 유형에 대한 명확한 규정이 없었다 초기의 C 컴파일러는 반환 유형을 명시적으로 요구하지 않았으며 개발자들은 종종 반환 유형을 생략했다 그러나 이는 프로그램이 정상적으로 종료됐는지 아닌지를 운영 체제에 알릴 방법이 없다는 문제를 야기했는데

시간이 지나면서 C 언어는 표준화 과정을 거쳤고 이 과정에서 main 함수의 반환 유형으로 int를 사용하는 것이 표준으로 채택되었다 이는 1989년 ANSI C 표준에서 공식화되었으며 이후 ISO C 표준에서도 계속 유지되었다

이렇게 int를 통해 0과 0이 아닌 다른 수로 상태를 반환하는 방식은 프로그램이 어떻게 종료되었는지 상태를 명확하게 전달하는 효과적이고 간단한 방법이기에 main 함수는 int 타입을 사용한다

솔직히 말하자면 이 글을 쓰기 전에 나 또한 오랜만에 C와 C++을 보니 종료 상태 반환을 까먹고 어? 왜 main 함수가 int타입이지?라는 조금은 멍청한 생각으로 글을 쓰기 시작했다… 그래도 그냥 int 타입을 반환해서 int 타입이다라고 하기에 아쉬워서 좀 더 자세히 찾았었다

역사적 관례

앞에서 말했듯이 지속해서 int 타입을 사용하는 이유는 그냥 역사적 관례이기 때문이다..! C 언어의 표준 이후 main 함수는 int 타입으로 정의되었으며 이 관례는 C++과 다른 언어들에도 영향을 미쳤기에 역사적으로 이어져 온 이 관례를 끊을 딱히 크리티컬한 문제도 없기에 현재까지도 지속되고 있다

표준화 및 호환성

이것 또한 종료 상태 반환에서 말했듯 int 반환 유형은 C와 C++의 표준에 명시되어 있다 이를 지키는 것은 프로그램이 어떤 환경에서도 일관된 방식으로 동작하고 다른 프로그램들과의 상호 작용이 예측 가능하게 만드는데 도움이 되며

호환성 측면에서도 int 반환 유형이 표준으로 자리 잡은 이후 C++와 같은 다른 언어에도 영향을 미쳤기에

정리하면 이러한 표준화를 지속해서 지키는 이유는 다양한 컴파일러와 시스템 간의 호환성을 유지하기 위함이다

유연성 측면

마지막으로 int 타입은 다양한 종류의 상태 코드를 표현할 수 있어 프로그래머가 프로그램의 종료 상태를 보다 세밀하게 제어할 수 있게 된다

이는 즉 프로그램의 다양한 실행 결과를 보다 명확하게 표현할 수 있기에 매우 유용하다

결론

이러한 이유들로 인해 C와 C++ 언어에서 main 함수는 int 타입으로 정의되고 있으며 프로그래밍 언어에서 널리 받아들여진 관례가 된 것처럼

main 함수의 반환 타입 같이 프로그래밍 언어의 설계에서 간단하지만 중요한 결정이 어떻게 광범위한 영향을 미칠 수 있는지를 알 수 있는 예를 확인할 수 있다

끝으로 솔직히 이번 글을 쓰면서 아..! 반환 타입으로 상태를 나타냈지라는 걸 깨달았을 때 쓸 내용이 없어 걱정이었는데 그래도 다행히 인터넷과 ChatGPT를 쥐어 짜내니 생각보다 내용이 나와서 다행이었다…

This post is licensed under CC BY 4.0 by the author.