#define매크로상수, 매크로함수, #ifdef, #ifndef, #undef, #if, #elif, #else, #endif C/C++

-        매크로 상수

#define은 단순한 치환을 하기 위한 내용을 정의하는 기능

형식

#define 매크로_상수 치환할_내용

간단한 예)

#define TRUE 1

#define FALSE 0

 

원주율을 매크로 상수로 정의

#include<stdio.h>

//원주율을매크로상수로정의

#define PI 3.141592

 

void main()

{

       int r;

       double area, dulre;

       printf(" 반지름을입력: ");

       scanf("%d", &r);

 

       //전처리기에의해서매크로확장

       area= r * r * PI;

       dulre = 2 * r * PI;

       printf(" 원의면적=> %lf \n", area);

       printf(" 원의둘레=> %lf \n", dulre);

}

 

 

 

 

-       매크로 함수

함수와 같은 기능을 하는 매크로

간단한 예)

#define SQUARE1(x) ((x)*(x))

 

제곱 구하는 일반 함수와 매크로 함수

#include<stdio.h>

//매크로함수

#define SQUARE1(a) a*a     //잘못된예

#define SQUARE2(a) ((a)*(a))

 

int square(int a)   //일반사용자정의함수

{

       return a*a;

}

void main()

{

       printf(" square => %d \n", 100/square(2+3));

       printf(" SQUARE1 => %d \n", 100/SQUARE1(2+3));

       printf(" SQUARE2 => %d \n", 100/SQUARE2(2+3));

}

SQUARE1은 일반적인 함수처럼 호출되어 결과를 얻지 않고 단순 치환을 하기 때문이다.

SQUARE2가 일반 함수와 동일한 결과를 얻은 이유는 괄호를 철저히 붙여 주었기 때문이다.

 

 

 

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

}

 

 

 

출처 : http://bestheroz.blog.me/95165923


덧글

댓글 입력 영역