우리가 c언어 코딩을 할 때 main 함수의 끝은 항상 return 0; 으로 끝나게 된다.
왜 return 0일까? return 1도 되고 return 2도 될텐데 말이다. 그리고 실제로 return 0을 다른 것으로 대체해도 main 함수는 이상없이 작동하게 된다.
심지어 return 0을 작성하지 않아도 정상 작동을 한다. 그렇다면 왜 return 0; 를 쓸까?
우리가 함수를 작성할 때 return은 해당 함수를 정상적으로 끝내고 반환을 하겠다는 것을 의미한다.
main 함수도 크게 다르지는 않은데 C언어 코딩을 해봤다면 알겠지만, 메인 함수의 경우 int main() 으로 int 형을 반환하는 함수이다.
함수가 끝나면 해당되는 자료형을 반환해주어야 하니까 main 함수의 경우 return 0; 을 해주어서 정상적으로 에러 없이 끝났음을 알려주었던 것이다.
그러나 시간이 흐르고 C99(1999년)부터 컴파일러가 알아서 메인함수가 끝나면 return 0을 해주기 때문에 현재 우리는 main 함수에 return 0을 해주지 않아도 작동하는 것이다.
예를 들어,
우리가 이런 코드를 작성해서 컴파일 한다면,
int foo ( void ) { }
int main( void ) { }
C89 버전은 foo, main 모두 에러가 뜬다.
sandiego:$ gcc src/no_return.c -std=c89 -Wall
src/no_return.c: In function ‘main’:
src/no_return.c:2: warning: control reaches end of non-void function
src/no_return.c: In function ‘foo’:
src/no_return.c:1: warning: control reaches end of non-void function
하지만 C99 부터는 컴파일러가 알아서 return 0 을 main 함수 끝에 넣어주기 때문에 foo 함수만 에러가 뜬다.
sandiego:$ gcc src/no_return.c -std=c99 -Wall
src/no_return.c: In function ‘foo’:
src/no_return.c:1: warning: control reaches end of non-void function
예전 학부 1학년 때 교수님한테 같은 질문을 했었는데, 기억이 나질 않더라..
그래서 자료를 찾아서 정리해봤다. 쓸모 없지만 궁금할 수도 있는 이야기 끝.
결론 : return 0는 함수가 무사히 종료되었다는 뜻, 굳이 0을 쓰는 이유는 관습적인 이유이다. 1999년 이후로는 컴파일러가 알아서 main 함수가 끝나면 return 0를 해줘서 안적어도 된다.
reference : https://stackoverflow.com/questions/4138649/why-is-return-0-optional
'IT > C 언어' 카테고리의 다른 글
| c언어에 call by reference는 없다. (0) | 2022.04.29 |
|---|




최근댓글