카테고리 없음2011. 7. 27. 15:09

- 매크로 상수

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

}

Posted by babuzzzy