#include <stdio.h>
#include <stdlib.h>
#define MACRO_VALUE 5 // 매크로 상수 (전역)
#define MACRO_FUNC(a, b) (MACRO_VALUE * (a) * (b)) // 매크로 함수 (전역)
intmain(){intMACRO_VALUE=5000;// --> 오류 발생 : 식별자가 필요합니다.returnEXIT_SUCCESS;}
1
2
# 오류 내용"식별자가 필요합니다."
(5) 매크로 함수를 사용할 때 괄호의 중요성
매크로 함수를 사용할 때에는 적극적으로 괄호를 써 주는 게 좋다.
1
2
3
4
5
6
7
8
9
10
voidcaution_at_using_macro(){#define MACRO_VALUE 1000
#define MACRO_FUNC(a, b) (MACRO_VALUE * a * b)
intx=5;inty=15;printf("CAUTION AT USING MACRO [WRONG]: %d\n",MACRO_FUNC(x+5,y+5));#define MACRO_FUNC(a, b) (MACRO_VALUE * (a) * (b))
printf("CAUTION AT USING MACRO [CORRECT]: %d\n",MACRO_FUNC(x+5,y+5));};
1
2
3
# 출력
CAUTION AT USING MACRO [WRONG]: 5080
CAUTION AT USING MACRO [CORRECT]: 200000
1
2
3
4
5
6
7
8
9
10
11
// 원리 : 아래와 같이 중간파일이 만들어지voidcaution_at_using_macro(){#define MACRO_VALUE 1000
#define MACRO_FUNC(a, b) (MACRO_VALUE * a * b)
intx=5;inty=15;printf("CAUTION AT USING MACRO [WRONG]: %d\n",(1000*5+5*15+5));#define MACRO_FUNC(a, b) (MACRO_VALUE * (a) * (b))
printf("CAUTION AT USING MACRO [CORRECT]: %d\n",(1000*(5+5)*(15+5)));};
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments