본문 바로가기

연구 노트/C, C++

[다시 C언어] 함수 반환형, 안적어도 될까?

Keringhan의 "The C Programming Language"에 실려있는 예시 코드들을 보면 main 함수 반환형이 적혀있지 않은 것을 발견하였습니다. 아래 처럼요.

main()
{
    ...
}

평소 같았으면 저자가 코드를 빠트렸나보다 생각했었을 것입니다. 그러나 내용을 충분히 곱씹으며 봐야 한다는 keringhan의 책이어서 혹시나 하는 마음으로 책 내용과 똑같이 반환형 없이 코드를 작성하고 빌드해 보았습니다. 결과는 아래와 같은 경고 문구가 출력되었습니다.

Ex_01-03.c:3:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
    3 | main()
      | ^~~~

그렇습니다. 이것은 경고(warning)이지 오류(error)가 아닙니다. 따라서 문제없이 실행 파일이 만들어집니다. 경고의 내용을 보면 기본 반환형이 int형인 것을 알 수 있습니다. 물론 명확하게 반환형을 적어주는 것이 좋겠지만 기본값이 있다는 사실도 알아두면 좋을 것 같습니다.

추가 내용

이 문제와 관련해서 조금 더 조사하던 중 알게 된 사실을 덧붙입니다. "The C Programming Language" 서문에도 적혀있듯이 이 책은 'ANSI 표준 C'라고도 불리는 C89를 기준으로 설명하고 있습니다. 그래서 컴파일러에 C89로 컴파일하라는 옵션값을 줘봤습니다.

$ gcc -std=c89 example.c

그 결과 경고(warning)도 없이 정상적으로 실행 파일을 만들어내는 것을 확인하였습니다. 따라서 저자가 책을 쓰던 당시에는 경고조차도 뜨지 않는 아주 정상적인 코드였다는 것을 알 수 있습니다.

참고로 제가 사용하는 컴파일러는 GCC 9.3.0입니다. 그리고 이 컴파일러는 C11을 확장한 'GNU11'이라는 표준을 사용하고 있지요. 컴파일러의 C표준 기본 설정은 공식 문서를 참고하여 확인하였습니다.