본문 바로가기

C, C++

조건 매크로

#if 일반 if 문처럼 값(조건)이 참일때 해당 블록을 실행합니다.

#elif(elseif), #else 마찬가지입니다. 다만, 일반 if 문처럼 {}로 시작과 끝을 구분하지 않고 끝부분에 #endif 추가합니다. 또, 조건문에 ()를 쓰지 않아도 됩니다.

#define LEVEL 1 

#if LEVEL==1//#if (LEVEL==1)와 같은 뜻입니다. 
//코드1 실행 
#elif LEVEL==2
//코드2 실행
#else
//코드3 실행
#endif

#if 매크로라서 컴파일 시간에 실행됩니다. 그래서 LEVEL이 1인 경우 컴파일 되면 코드1만 실행되고 코드2, 3은 일반 if 문과 다르게 아예 없는 코드가 됩니다.

 

그리고 #if는 매크로 값을 평가하기 때문에 매크로만 넣어 비교해야 합니다.

 

 

만약 매크로가 정의되었는지의 여부를 평가하기 위해 defined()를 사용할 수 있습니다.

#define POWER 1 

#if defined(LEVEL) && (POWER>0)//LEVEL이 선언되어있고 POWER가 0보다 클때
#endif

그런데 #if defined(LEVEL)를 줄여서 #ifdef LEVEL로 쓸 수 있습니다. 그래서 #ifdef 옆에는 매크로 상수 1개만 올 수 있습니다.

 

#ifdef LEVEL//LEVEL이 정의됬을 때

//#elif POWER #elif defined(POWER)라고 써야 맞습니다.

#else//정의되지 않았을 때

#endif 

#ifndef#ifdef의 반대로 #if !defined(LEVEL)와 같습니다.

'C, C++' 카테고리의 다른 글

#error  (0) 2019.12.17
#undef  (0) 2019.12.16
#, ##, \  (0) 2019.12.13
#define  (0) 2019.12.12
#include  (0) 2019.12.11