[C] void main(), int main(), 그리고 int main(void)의 차이

김태희·2023년 12월 20일
0
post-thumbnail

C를 학습하다 보니 이전에는 void main()을 사용하라고 배웠으나, 자료구조 책을 보니 int main(void) 형으로 메인 함수를 사용하는 경우가 대부분이었다.

그럼 int main() 속의 void는 무슨 의미인지, 이런 표현이 실행상에는 문제가 없지만 어떤 차이가 있는지 궁금해 알아보게 되었다.


C언어의 표준

C언어의 표준에서는 void main이 허용되지 않고 int main만 허용된다.

main 함수가 반환하는 값은 프로그램의 종료 여부를 의미하는 값으로 사용되기에 종료 상태가 없다는 의미의 void main은 잘못된 표현이다.

하지만 컴파일러들은 대부분의 개발자들이 main 함수의 반환 값을 활용하지 않는 사실을 알기에 개발자의 편의성을 위해 오랜 기간 동안 void main을 허용했다.

이러한 컴파일러들의 허용으로 void main()을 사용하면 컴파일 할 때 내부적으로는 int mainreturn 0까지 int main과 동일하게 처리된다.


앞으로 사라질 void main()

C언어의 다양한 컴파일러들은 많은 회사들이 독자적으로 발전시켜 왔다.

그러하여 동일한 개발자들은 다른 회사나 다른 환경의 컴파일러를 사용할 때 문법이나 사용방법의 간소한 차이로 어려움을 겪기도 했다.

최근에는 이런 C 컴파일러를 하나로 통합하려는 노력이 시도되고 있고 많은 컴파일러 회사들이 노력에 동참하고 있다.

이런 노력으로 독자적으로 허용했던 문법들을 조금 씩 없애고 표준을 강하게 지키려는 분위기로 이어지게 되었다.

이로 인해 앞으로도 프로그래밍을 할 때 void main을 사용하면 오류가 나는 컴파일러가 점점 많아질 것이다.

실제로, 유명한 코딩테스트 사이트인 백준에서도 void main이 허용되지 않는다는 사실을 확인할 수 있었다.



int main()이 맞다면 매개변수 void는 무엇인지 ?

int main()의 표준은 int main(int argc, char *argv[])이다.

여기서 매개변수가 필요하지 않다면 int main(void)로 표현이 가능하고, 여기서 void를 생략한 것이 int main()이다.

결국 두 표현은 똑같으나 void를 명시함으로 명확하게 인수가 없다는 것을 알려줄 수 있다.


결론

나름 고등학교 때부터 사용해온 void main이 잘못된 표현이었다니 놀라웠다.

앞으로 나아가면서 개인 프로젝트가 아닌 공동 프로젝트와 같은 협업이 많아질텐데

실무에서 동료 개발자와의 혼동을 없애기 위해 앞으론 int main(void)를 사용해야겠다.

0개의 댓글