진단이 필요 없음
진단이 필요 없음 (No Diagnostic Required, NDR)
문서를 읽다 보면 표준에서 "진단이 필요 없다(no diagnostic required)"라는 표현을 자주 만나게 돼요. 이게 정확히 무슨 뜻인지, 그리고 왜 컴파일러가 오류를 알려주지 않는데도 그 프로그램이 잘못된 건지 궁금하셨던 분들이 많을 거예요.
출처: cppreference
본문
"진단이 필요 없다(No Diagnostic Required)"는 어떤 표현이 언어 규칙상 ill-formed(규칙에 어긋난 형식)임에도 불구하고, 컴파일러가 진단 메시지나 오류 메시지를 반드시 내보내야 할 필요는 없다는 뜻이에요. 보통 그 이유는 이런 상황들을 잡아내려고 시도하면 컴파일 시간이 지나치게 길어지기 때문이에요.
그런 프로그램이 실제로 실행되면, 그 동작은 undefined(정의되지 않음)가 돼요.
정리하면 이렇게 이해하면 돼요. 표준이 "이건 잘못된 코드야"라고 규정해 놨는데, 컴파일러가 그걸 굳이 찾아내서 알려줄 의무는 없다는 거죠. 컴파일러가 조용히 넘어간다고 해서 올바른 프로그램이라는 뜻은 아니고, 어쨌든 이런 코드를 실행하면 결과를 보장할 수 없어요.