26. 매크로와 전처리기
26-1 전처리기에 의한 매크로 처리 전처리기에 의한 전처리 그림 26-1
#define으로 시작하는 전처리기 지시자 26-1 전처리기에 의한 매크로 처리 #define으로 시작하는 전처리기 지시자 컴파일러에 의해 처리되는 것이 아니다. 전처리기에게 단순 치환 작업을 요청할 때 사용되는 지시자 그림 26-2
26-1 전처리기에 의한 매크로 처리 /* Circle1.c */ #include <stdio.h> 26-1 전처리기에 의한 매크로 처리 /* Circle1.c */ #include <stdio.h> #define PI 3.1415 int main (void) { double area; double radius; fputs("반지름 : ", stdout); scanf("%lf", &radius); area=radius*radius*PI; printf("넓이는 %f 입니다 \n", area); return 0; } /* Circle1.c */ … … … int main (void) { double area; double radius; fputs("반지름 : ", stdout); scanf("%lf", &radius); area=radius*radius* 3.1415; printf("넓이는 %f 입니다 \n", area); return 0; }
26-1 전처리기에 의한 매크로 처리 /* Preproc.c */ #include <stdio.h> 26-1 전처리기에 의한 매크로 처리 /* Preproc.c */ #include <stdio.h> #define string "C++ Compatible C" #define cal (3*4)+(12/4) #define ONE 1 #define TWO ONE+ONE #define T HREE TWO + ONE int main (void) { printf("string : %s \n", string); printf("cal : %d \n", cal); printf("ONE=%d, TWO=%d, THREE=%d \n", ONE, TWO, THREE); return 0; }
매크로 함수란? 26-2 매크로를 이용한 함수의 구현 매크로를 기반으로 정의되는 함수 26-2 매크로를 이용한 함수의 구현 매크로 함수란? 매크로를 기반으로 정의되는 함수 함수가 아니라 매크로다! 다만 함수의 특성을 지닐 뿐이다. 예제 square1.c 참조 그림 26-3
매크로 함수의 장점 매크로 함수의 단점 매크로 함수가 되기 위한 조건 26-2 매크로를 이용한 함수의 구현 26-2 매크로를 이용한 함수의 구현 매크로 함수의 장점 자료형에 독립적이다. 실행 속도가 향상된다. 매크로 함수의 단점 구현이 어렵다. 디버깅이 어렵다. 매크로 함수가 되기 위한 조건 함수의 크기가 작아야 한다. 그렇지 않을 경우 실행 파일의 크기가 커지게 된다.
#을 이용한 전달 인자의 문자열화 add.c의 해결을 위한 두 가지 특성 26-2 매크로를 이용한 함수의 구현 26-2 매크로를 이용한 함수의 구현 #을 이용한 전달 인자의 문자열화 예제 add.c의 문제점 파악! add.c의 해결을 위한 두 가지 특성 예제 str_con.c, str_literal.c 참조 그림 26-5 그림 26-6
26-2 매크로를 이용한 함수의 구현 add.c의 문제점 해결 예제 add_literal.c 참조 그림 26-7
26-2 매크로를 이용한 함수의 구현 ##을 이용한 토큰의 결합 token_concat.c 참조 그림 26-8