번역 단위의 정의에서 빈 원본 파일을 번역 단위로 처리하면 구문 오류가 발생합니다.
C11 표준의 5.1.1.3 절 (N1570 draft 참조)에는 구문 규칙이나 제약 조건을 위반하는 번역 단위에 대한 진단이 필요합니다. 진단 프로그램이 치명적이지 않은 경고이고 구현이 어쨌든이를 변환하면 결과 동작은 누락 (4p2)으로 정의되지 않습니다. 구현이 진단 메시지를 발행하지 못하면, 구현은 (적어도 당신이 그것을 호출 한 모드에서) 부적합하며, 표준은 그것에 대해 더 이상 말하지 않습니다.
특정 구현의 동작이 언어 표준이 말하는 것에 대한 질문에 직접 대답하지는 않지만 gcc와 clang이 빈 소스 파일 (C11을 따르려고 시도 할 수있는 옵션 포함)에 대해 수행하는 작업은 다음과 같습니다.
$ gcc -c -std=c11 -pedantic-errors empty.c
empty.c:1:0: error: ISO C forbids an empty translation unit [-Wpedantic]
$ clang -c -std=c11 -pedantic-errors empty.c
empty.c:1:1: error: ISO C requires a translation unit to contain at least one declaration [-Werror,-Wempty-translation-unit]
^
1 error generated.
$
표준에서 명시 적으로 정의되지 않은 경우 정의에 따라 정의되지 않은 동작입니다. – rubenvb
"기본"정의되지 않은 동작을 의미합니까? –
@rubenvb : 정의되지 않은 동작이 아니라 구문 오류입니다. –