함수처럼 쓰이는 macro를 만드는 방법은 2가지가 있다.

#define을 사용하는 방법inline함수가 있다.
2개의 가장 큰 차이점#define의 경우는 전처리기에 의해서 처리가 된다는 것이고,
inline의 경우는 컴파일러에 의해서 처리가 된다는 점이다.
데이터의 처리 속도는 전처리기에 의해서 처리가 되는 define이 inline함수보다 더 빠른것이 

당연하지만 define의 경우 아래와 같은 문제점을 갖고 있다.
#define CALL_WITH_MAX (a, b)  ((a) > (b)? (a) : (b))
CALL_WITH_MAX (++a, b);
위와 같이 define을 사용했을때 예상하지 못했던 문제가 발생했다.
위의 define은 (++a) > (b) 인 경우, (++a)를 반환하게 된다. 즉 a값이 2번 증가하게 되는 것이다.
위와 같은 문제는 한눈에 눈치채기도 쉽지 않은 부분이라, 고생할 확률도 크다.
아무쪼록 define을 사용할때는 유의해야 겠다.