조건부 컴파일 매크로
조건부 컴파일 매크로는 조건문과 매우 유사한 역할을 한다.
조건에 따라 해당 파일의 코드 일부를 실행하거나 건너뛸 수 있다.
조건부 컴파일 매크로의 지시자에는 #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는 정의된 적이 없기 때문에 위 코드의 결과는 위와 같다.
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] 파일의 분할 (extern, static) (0) | 2024.02.28 |
---|---|
[C언어] 파일 입출력, 파일 스트림 생성 (fopen, fclose) (0) | 2024.02.28 |
[C언어] 매크로 (define, 오브젝트 유사 매크로, 매크로 함수) (0) | 2024.02.25 |
[C언어] 구조체의 중첩 (0) | 2024.02.25 |
[C언어] 함수로의 구조체 변수 전달과 구조체 반환 함수 (0) | 2024.02.24 |