본문 바로가기

고급C,C++

[고급C언어] 매크로함수, #ifdef, #ifndef, #undef, #if, #elif, #else, #endif


-       #if, #elif, #else, #endif

조건부 컴파일을 위한 것으로 특정 조건이 만족하면 컴파일 작업을 수행하고 그렇지 않으면 수행하지 않도록 하기 위해 사용된다.

조건부 컴파일을 위한 전처리 지시자 살피기

#include<stdio.h>

#define MAX 20

void main()

{

       int size;

#if MAX > 100

       size=100;

#elif MAX > 10

       size=10;

#else

       size=0;

#endif

 

       printf(" size = %d \n", size);

}

 

 

 

-       #ifdef, #ifndef

특정 매크로가 정의되어 있는지를 확인하기 위해 사용된다.

#ifdef문은 특정 매크로가 정의되어 있는지를 물어 본다.

#ifndef문은 “if not define”, 특정 매크로가 정의되어 있지 않았는지를 물어 볼 때 사용한다.

#ifdef, #ifndef문 사용하기

#include<stdio.h>

#define _MYDEBUG 10

 

#ifdef _MYDEBUG

void sub(){

       printf(" debug \n");

}

#endif

 

#ifndef _MYDEBUG

void sub(){

       printf(" release \n");

}

#endif

 

void main()

{

       sub();

}

 

 

 

 

-       #undef

#define과는 정반대의 역할을 하는 것으로 이미 정의된 기호 상수를 취소시켜 정의되지 않은 상태로 만들고자 할 때 사용한다.

#define SIZE 10

i = SIZE;

#define SIZE 20

j = SIZE;

위와 같이 SIZE를 중복 정의한 것이 되면 컴파일 시 에러가 발생하게 된다.

따라서 #undef를 사용하여 삭제 후 재 선언할 수 있다.

#define SIZE 10

i = SIZE;

#undef SIZE

#define SIZE 20

j = SIZE;

 

#undef문 사용하기

#include<stdio.h>

 

#define SIZE 10

 

void main()

{

       int i, j;

       i=SIZE;

 

#ifdef SIZE

       #undef SIZE

       #define SIZE 20

#endif

 

       j=SIZE;

       printf(" i=%d, j=%d \n", i,j);

}