Computer Science/C/C++

[펌]전처리기 6/6

seyun99 2011. 2. 5. 14:58

18-2-바.#error, #line

#error 전처리문은 지정한 에러 메시지를 출력하고 전처리 과정에서 컴파일을 중지하도록 한다. 에러 메시지는 메시지 창에 출력되는데 비주얼 C++의 경우 Output창에 나타난다. 단독으로 사용되는 경우는 없으며 주로 조건부 컴파일 지시자와 함께 사용되어 컴파일 불가능한 상황임을 개발자에게 알려 주는 역할을 한다. 다음이 그 예이다.

 

#ifndef UNICODE

#error This program require unicode environment

#endif

 

유니코드로 컴파일되고 있는 상황이 아니면 이 모듈은 컴파일을 거부하며 #error 이후는 컴파일되지 않는다. 코드 중에 반드시 유니코드가 필요한 부분이 있는데 현재 상황이 그렇지 못하다면 오동작하도록 내버려두는 것보다 컴파일을 거부하여 개발자가 환경을 맞춘 후 다시 컴파일하도록 유도하는 것이 훨씬 더 좋은 방법이다. 이 문장의 사용 위치는 어디든 상관없으나 보통 소스 선두에 둔다.

운영체제의 버전이 맞지 않다거나 개발툴이 부적합하다거나 할 때도 #error 전처리문을 사용한다. 자신이 만든 모듈을 혼자만 쓴다면 굳이 이렇게까지 할 필요는 없겠지만 불특정 다수가 사용할 예정이라면 안전을 위해 이 모듈이 컴파일될 수 있는 상황을 명확하게 알려 주는 것이 좋다. 컴파일 조건을 문서에 적어 놓거나 주석으로 기록할 수도 있겠지만 모든 개발자가 문서를 꼼꼼하게 읽어보지 않기 때문에 이런 강제적인 에러 메시지 출력문이 필요하다.

#line 전처리문은 __LINE__, __FILE__ 매크로를 재정의한다. 줄 수는 정수로 주고 파일명은 문자열 형태로 지정하되 파일명을 생략할 경우 기존의 파일명이 그대로 유지된다. #line 123 "a.cpp" 명령은 현재 줄을 123으로 바꾸고 파일명을 a.cpp로 변경한다. 이 전처리문은 사용자가 직접 사용하는 경우가 드물며 주로 컴파일러가 에러 메시지 조립을 위해 내부적으로 사용한다.