1. 개요

매크로 함수는 흔히 일반 함수보다 빠르다.

그 이유는 컴파일 이전에 코드가 변환되기 때문이다.

일반적인 함수가 가지는 호출 과정이 없기 때문에 속도에서 좋은 성능을 나타낸다.


하지만 때론 매크로 함수는 치명적인 버그나 속도 저하의 원인이 된다.


여기서는 매크로 함수의 오류 코드를 살핀다.


2. 문제

다음 매크로 함수의 오류를 보여라. 

#define MAX(x,y) ((x) > (y) ? (x) : (y))


3. 코드

3-1) 전체코드

3-2) 출력



4. 정리


이유

일반적인 함수는 파라메터에 먼저 i값인 4를 넣고, 함수의 수행이 끝난 후 i값을 하나 증가시킨다.

그러므로 i : 5, j : 4이다.


하지만 매크로 함수는 컴파일 이전에 다음과 같이 코드 변화가 일어난다.

( (3) > (i++) ? (3) : (i++) ) 

그러므로 맨 처음 (3) > (i++) 조건 검사를 끝내고 i의 값이 증가한다. 

4 -> 5

그 다음 처리가 끝나고 i의 값을 또 하나 증가시킨다. 

5 -> 6


즉, 일반적인 함수는 i++ 증가 연산자가 한 번만 수행되지만, 다음과 같은 매크로 코드는

코드 변화가 일어나면서 두 번의 i++ 증가 연산자로 변화된다.


결론

성능적인 이슈가 반드시 필요하지 않다면 매크로 함수보다 일반적인 함수를 사용하자.



 

+ Recent posts