1. int 값을 반환하는 main 함수가 표준 문법이다.
2. void 값을 반환하는 main 함수는 왜 존재하는가?
기본적으로 C언어 표준안에서는 void main은 허용하지 않는다.
main 함수가 반환하는 값은 해당 프로그램의 종료 상태를 의미하므로 종료상태가 없다는 의미인 void main의 형식은 원칙적으로 보면 잘못된 함수이다.
이를 허용한 이유를 보면 매우 단순하다.
C언어를 배운 사람들에게 int main 함수 끝에 사용한 return 0; 코드를 자신의 프로젝트에 활용한 적이 있는지 물어보면 된다. 아마도 main 함수의 반환 값을 활용해 본 경험이 있는 개발자는 거의 없을 것이다. 또 이를 어떻게 활용할 수 있는지 아는 사람도 없다시피 한다. 초보자들에게 물어보면 return 0; 코드는 main 함수에 그냥 적어야 하는 기본 양식인줄 아는 사람들도 많다.
이러한 이유로 컴파일러 개발자 입장에서 main 함수의 반환 값을 사용하지도 않으면서 return 문을 적는게 불편하다고 판단해 void main 이라는 표현을 추가적으로 제공한 것이다. 다시 말해, 개발자들이 조금이라도 코드를 적게 쓰도록 도와주기 위해 void main이라는 문법을 제공한 것이다.
void main( )
{
}
int main( )
{
return 0;
}
컴파일러 입장에서 이 두 가지 표현을 컴파일 할 때 내부적으로 다르게 처리하는 것 없이 동일하게 처리한다.
결국 단순하게 사용자가 편집하는 것만 편하게 할 수 있도록 도와주는 것이다.
3. void main은 앞으로 사용할 수 없게 되었다.
많은 기업들이 독자적인 C 컴파일러를 만들고 발전시켜 왔다. 그래서 개발자들은 동일한 언어를 사용하면서도 다른 회사나 다른 환경의 C 컴파일러를 사용할 때 약간씩 차이나는 문법이나 사용방법으로 곤란을 겪곤 했다.
최근 이러한 문제를 해결하기 위해 C 컴파일러를 하나로 통합하자는 노력이 시도되고 있는데, 많은 컴파일러 회사들이 이 노력에 동참하고 있다. 그렇게 되면서 과거 독자적으로 발전했거나 허용했던 문법들이 하나 둘 사라지고 표준안을 더 강하게 지키는 쪽으로 분위기가 변하고 있다.
이렇게 비표준적인 문법들이 사라지고 있는 가운데 void main도 함께 사라지게 되었다. 따라서 앞으로 C 프로그래밍을 할 때 void main을 사용하면 오류가 나는 컴파일러가 점점 더 많아질 것이다.
참조 int main과 void main에 대한 이.. : 네이버블로그 (naver.com)