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표준 기본 설정은 공식 문서를 참고하여 확인하였습니다.
'연구 노트 > C, C++' 카테고리의 다른 글
vcpkg로 C/C++ 오픈소스 패키지 관리하기 (0) | 2022.08.25 |
---|---|
C++를 사용할 수 있는 GUI 라이브러리 모음 (0) | 2022.08.24 |
[다시 C언어] 시작하며. (0) | 2021.02.18 |
C언어에서 가변 인자 함수를 만들려면? (0) | 2021.02.07 |
구조체 내부 변수 뒤 이것 ':'의 정체, '비트 필드' (0) | 2021.01.26 |