- 매크로 상수 #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); }
카테고리 없음2011. 7. 27. 15:09