티스토리 뷰
C언어에서 매크로는 #define지시자를 통해 만들 수 있다.
매크로는 일반함수와는 다르게 프로그램이 컴파일 되기 전에 변경하게 된다.
다음과 같은 코드가 있다.
#include<stdio.h> #define CAL(x) x*2-1 int main(){ printf("%d\n", CAL(5) ); return 0; }
이 코드를 컴파일하게 되면, 값이 printf("%d\n", x*2-1 ); 으로 변경된다.
하지만, 이 코드에는 문제가 있다.
만약, 다음과 같다면 어떻게 될까?
#include<stdio.h> #define CAL(x) x*2-1 int main(){ printf("%d\n", CAL(5) * CAL(5)); return 0; }
보통 5*2-1 = 9이므로, 9*9 = 81을 예상하게 된다.
하지만, 매크로는 CAL(x)를 바로 x*2-1로 변경하는 것이다. 그렇기 때문에 x*2-1*x*2-1로 변경시키고,
-1의 결과를 가져오게 된다.
이를 원하는 방향으로 출력하기 위해서는 맨 왼쪽과 오른쪽에 괄호를 붙이면된다.
#include<stdio.h> #define CAL(x) (x*2-1) int main(){ printf("%d\n", CAL(5) * CAL(5)); return 0; }
'Language > C' 카테고리의 다른 글
[C언어] void형 포인터 (0) | 2013.10.02 |
---|---|
[C언어] scanf와 scanf_s의 차이 (1) | 2013.10.02 |
[C언어] #include < >와 #include " " (0) | 2013.10.02 |
[C언어] 가변인자 (0) | 2013.10.02 |
[C언어] 함수 포인터 배열 (0) | 2013.10.02 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday