Today's special moments become memories of tomorrow.

C

[C언어] 조건부 컴파일 1. #ifdef 와 #endif

lotus lee 2022. 8. 27. 16:00

#ifdef와 #endif는 전처리기의 일종으로, 특정 매크로가 정의되어 있는 경우에만 컴파일하는 조건부 컴파일을 한다.

 

#ifdef  매크로

   문장 1

   문장 2 

   ...

#endif

 

다음과 같은 예시를 보자

#define A 로, A가 정의되어 있으므로 #ifdef ~ #endif 사이의 printf문이 실행된다.

#include <stdio.h>
#define A
int main(void) {

#ifdef A
    printf("A가 정의되어 있으면 출력됩니다.");
#endif

    return 0;
}

실행 결과 :

 

만약에 A가 정의되어 있지 않으면?

아래 예시는 #define A가 빠져있는 상태이다.

#include <stdio.h>

int main(void) {

#ifdef A
    printf("A가 정의되어 있으면 출력됩니다.");
#endif

    return 0;
}

실행 결과, printf문이 실행되지 않는다.

 

이렇게 #ifdef는 if + define의 결합으로, 만약(if) 특정 매크로가 정의(define)되어 있다면 #endif가 나올때까지의 문장들을 실행하며, 정의되어 있지 않다면 실행하지 않는다.

 

사용목적

그렇다면 #ifdef는 왜 사용하는 것일까?

 

#ifdef는 전처리기라서 만약 매크로가 정의되어 있지 않다면, #endif 까지의 문장들을 컴파일하지 않는다.

위의 예시는 printf문 하나만 작성되어 있지만, 만약 100줄 이상의 문장이 있다면 컴파일을 하느냐 안하느냐의 차이가 커지게 된다.

따라서 특정 상황인지 아닌지를 나누어서, A 상황인 경우에는 컴파일을 하고, A 상황이 아닌 경우에는 컴파일을 하지 않도록 해서 효율성을 높일 수 있다. -> 조건부 컴파일

 

#ifdef  매크로

   문장 1

   문장 2 

   ...

   문장 100

#endif

 

 

#ifdef 와 #endif 사이에 #else를 두어서 특정 매크로가 정의되지 않을 때 #else 아래의 문장을 실행하게 할 수도 있다.

아래의 경우 매크로가 정의되어 있으면 문장1을 실행, 정의되어 있지 않으면 문장2를 실행한다.

 

#ifdef  매크로

   문장 1

#else

   문장 2 

#endif

 

 

#include <stdio.h>
#define A
int main(void) {

#ifdef A
    printf("A가 정의되어 있으면 출력됩니다.");
#else
    printf("A가 정의되어 있지 않으면 출력됩니다.");
#endif

    return 0;
}

실행 결과 : 

 

#include <stdio.h>

int main(void) {

#ifdef A
    printf("A가 정의되어 있으면 출력됩니다.");
#else
    printf("A가 정의되어 있지 않으면 출력됩니다.");
#endif

    return 0;
}

실행 결과 : 

'C' 카테고리의 다른 글

[C언어] static 변수(정적변수)  (2) 2024.03.22
[C언어 기초] 출력함수 printf(), 주석  (0) 2023.05.07