Study/C
메크로 함수의 사용
kimtaku
2015. 4. 1. 15:22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> #define PLUS(a,b,c) printf(#a "+" #b "+" #c "= %d\n",a+b+c) #define TIMES(a,b,c) printf(#a "*" #b "*" #c "= %d\n",a*b*c) int main(void) { int a,b,c; printf("정수 3개 입력: "); scanf_s("%d %d %d",&a,&b,&c); PLUS(a,b,c); TIMES(a,b,c); return 0; } | cs |
예상으로는 1+2+3= 6, 1*2*3=6 이렇게 출력되어야 하지만, 실제로는 그렇지 않았다.
#define 선언은 단순 치환인데, 여기서 대체되는 영역에 들어가있는 #(문자열로 인식)은 컴파일 되는 소스코드의 영향을 받는 것이라는 것을 알게 되었다.
즉 사용자의 입력에 영향을 받는것이 아닌, 메크로함수 선언시에 그 선언되는 소스에 영향을 받는것이다.