#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 |