본문 바로가기

C언어/C언어 문법

[C언어] 조건부 컴파일 매크로 (#if, #elif, #endif, #ifdef, #ifndef)

728x90
반응형

조건부 컴파일 매크로

 

조건부 컴파일 매크로는 조건문과 매우 유사한 역할을 한다.

조건에 따라 해당 파일의 코드 일부를 실행하거나 건너뛸 수 있다.

 

조건부 컴파일 매크로의 지시자에는 #if #elif #else #ifdef #ifndef 가 있다.

 

 

 

 

조건부 컴파일 매크로는 조건문과 마찬가지로 주어진 조건이 참이라면 범위 내의 코드를 컴파일하고 그렇지 않다면 해당 코드를 버린다.

 

이때 범위를 지정하는 방법으로 #endif를 사용하여 #if 가 끝나는 지점을 정의해주어야 한다.

 

따라서 아래 코드처럼 사용이 가능하다.

 

#include <stdio.h>

int main()
{
	int i = 55;
#if i < 50
	printf("i is small");
#elif i < 100
	printf("i is normal");
#else
	printf("i is big");
#endif
	printf("\nHello World!");
	return 0;
}

 

위 코드에서  i는 55이므로 #if의 조건을 충족하지 않는다.

 

따라서 printf("i is small"); 는 컴파일되지 않고 버려진다.

 

 

#elif는 조건문의 else if와 유사한 역할을 한다. #if의 조건이 불일치할 경우 조건을 검사하게 된다.

 

위 코드에서 #elif의 조건은 충족된다. 따라서 해당 범위 내의 코드를 실행하게 되며 #else 범위의 코드는 실행하지 않는다.

 

결과적으로 위 코드의 실행결과는 아래와 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

ifdef / ifndef

 

#ifdef 의 사용법도 #if~#endif과 크게 다르지 않다.

 

 

#ifdef는 #ifdef 뒤의 매크로가 정의되어 있으면 범위 내의 코드를 실행하는 역할을 수행한다.

 

#ifndef는 이름 그대로 ifndef 뒤의 매크로가 정의되어있지 않다면 범위 내의 코드를 실행한다.

 

 

#ifdef와 #ifndef도 #if와 마찬가지로 #endif를 사용하여 범위를 닫아서 지정해주어야 한다.

 

#ifdef는 아래 코드처럼 사용할 수 있다.

 

#include <stdio.h>
#define NUM 10
#define NUM1 100

int main()
{
#ifdef NUM1
    printf("NUM1은 정의되었다!\n");
#else
    printf("NUM1은 정의되지않았다!\n");
#endif

#ifndef NUM2
    printf("NUM2은 정의되지않았다!\n");
#else
    printf("NUM2은 정의되었다!\n");
#endif
    
    return 0;
}

 

 

 

NUM1은 100으로 정의되었지만 NUM2는 정의된 적이 없기 때문에 위 코드의 결과는 위와 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형