진단 지시자

진단 지시자 (Diagnostic directives)

전처리 단계에서 "이 조건을 만나면 아예 컴파일을 멈춰라"와 같은 의도를 표현하고 싶을 때가 있어요. 그 역할을 하는 게 #error 지시자예요. 컴파일러가 이 지시자를 만나면 주어진 메시지를 출력하고 프로그램을 ill-formed로 처리해 컴파일을 중단해요. C23부터는 컴파일을 멈추지 않는 #warning도 표준에 추가됐어요.

출처: cppreference

본문

문법 (Syntax)

#error   diagnostic-message   // (1)
#warning diagnostic-message   // (2) (since C23)

설명 (Explanation)

  1. #error 지시자를 만나면 구현은 diagnostic-message를 화면에 표시하고 프로그램을 ill-formed로 만들어 컴파일을 중단해요.
  2. (1)과 같지만, 프로그램의 유효성에는 영향을 주지 않고 컴파일이 계속돼요.

diagnostic-message는 반드시 따옴표로 묶을 필요 없이 여러 단어로 구성될 수 있어요.

주의할 점 (Notes)

C23에서 표준화되기 전에도 #warning은 많은 컴파일러가 적합 확장으로 모든 모드에서 제공하고 있었어요.

예제 (Example)

표준 준수 여부를 검사해서, 기준을 벗어나면 #error로 멈추고 C23 이상이면 #warning을 띄우는 예시예요.

#if __STDC__ != 1
#  error "Not a standard compliant compiler"
#endif

#if __STDC_VERSION__ >= 202311L
#  warning "Using #warning as a standard feature"
#endif

#include <stdio.h>

int main (void)
{
    printf("The compiler used conforms to the ISO C Standard !!");
}

가능한 출력:

The compiler used conforms to the ISO C Standard !!

같이 보기 (See also)

  • 조건부 포함 — #if/#ifdef 계열 지시자