본문 바로가기
language/c++

[c++] #ifdef, #ifndef, #if, #elif

by 파란하늘코더 2021. 2. 6.
반응형

최근 C++를 다루게 되면서 코드를 보다보면 제목에 써있는 전처리기를 많이 보게 되어서 정리를 하려 합니다.

 

1. 설명

조건부 컴파일을 할 수 있는 지시어로

 

#ifdef는 코드 이전에 define이 되어 있었는지를 check,

 

#ifndef는 코드 이전에 define이 되어있지 않는지를 check,

 

#if는 일반 if~else문과 같지만 컴파일을 구분하여 돌릴수 있는 지시어

 

2. 사용 예시

#define DEBUG

int main(){
    #ifdef DEBUG
        print("defined\n");
    #endif
    
    #ifndef DEBUG
        print("not defined\n");
    #endif

    return 0;
}

위와 같은 코드에서는 #ifndef 구문은 컴파일 조차 시도되지 않습니다

 

#ifdef, #ifndef는 define 여부를 check하지만, #if, #elif는 값을 직접 비교합니다

#define SEL  1

int main(){
    #if SEL == 1
        print("print 1\n");
    #elif SEL == 2
        print("print 2\n");
    #else
        print("print else\n");
    #endif
    return 0;
}

일반 조건문처럼 쓰면되지만, 컴파일을 돌리면 첫번째 구문만 컴파일에 포함이 되고

 

아래 두가지 구문은 포함이 되지 않습니다

'language > c++' 카테고리의 다른 글

[C ++] shallow copy vs deep copy  (0) 2021.05.08

댓글