Programming Language/C,C++

C, C++] 조건부 컴파일

TwinParadox 2018. 5. 8. 19:02
728x90

조건부 컴파일은 정해진 조건에 따라서 코드의 컴파일 여부를 제어하는 전처리기.


WinAPI용 코드를 리눅스에서 사용 제한하게 하는 것처럼 특정 플랫폼이나 OS에 특화된 코드를 구분하는 경우.

디버깅이나 테스트 코드 용도로 추가된 코드를 구분하는 경우.



#ifdef or #if/#elif/#else, 그리고 #endif를 이용하여 조건부 컴파일을 사용할 수 있음.



#ifdef 매크로

/* 코드 */

#elif defined 매크로

/* 코드 */

#else

/* 코드 */

#endif


#if 값 or 식

/* 코드 */

#elif 식

/* 코드 */

#else

/* 코드 */

#endif


#if defined 매크로

/* 코드 */

#endif


defined를 사용하면, #if를 사용했을 때보다 복잡한 조건을 사용할 수 있으며, 가독성을 위해서 괄호를 사용해 논리적 단위별로 묶는 것이 좋음.


위 매크로들은 해당 매크로가 정의된 경우에만 코드를 컴파일하는 것으로, 매크로가 정의되지 않은 경우에 대해서 #ifndef를 사용해야 함. 필자는 헤더 파일이 중복으로 포함되었을 때 이를 확인하고 방지하는 용도로 사용함.


#ifndef 매크로

/* 코드 */

#endif




[참고]


__DATE__ : 컴파일 시점의 날짜

__TIME__ : 컴파일 시점의 시각

__FILE__ : __FILE__ 매크로가 사용된 헤더나 소스 파일

__LINE__ : __LINE__ 매크로가 사용된 라인 넘버


해당 매크로는 컴파일러에서 제공.


컴파일러별 옵션 지정 방식(VC++, GCC)

Visual Studio에서는 프로젝트 > 속성 > C/C++ > 전처리기 > 전처리기 정의에서,

GCC는 'gcc 소스파일 -D매크로이름/ -D매크로이름=값'으로 컴파일 옵션을 지정하여 컴파일할 수 있음. 

728x90