본문 바로가기
카테고리 없음

[C/C++] Macro function 주의 할 점

by 일사만루병살 2011. 1. 26.
#include <iostream>
#define SQUARE1(x) x*x //#define SQUARE1(x) ((x) * (x))
using namespace std;


void main()
{
int a=5, res;
res = SQUARE1(a+2);
cout<<"SQUARE1(a+2) : "<<res<<"\n"; //17

res = 100/SQUARE1(a);
cout<<"100/SQUARE1(a) : "<<res<<"\n"; //100
}


원래 49와 4가 나와야 하는데 매크로 함수를 보면 #define SQUARE1(x) x*x로 되어있어 a+2*a+2가 되어 '2*a'가 먼저 연산 되게 된다. 이걸 바로 잡을려면 #define SQUARE1(x) ((x) * (x)) ((a+2) * (a+2))가 되어 7*7이 되어 제대로 연산되게 된다.