#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)와 같습니다.