알고리즘

매크로 함수의 문제점

전자둥이 2021. 7. 19. 12:43
반응형

매크로 함수는 컴파일 이전에 코드가 변환되기 때문에 일반 함수보다 속도가 빠릅니다.

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

 

하지만 매크로 함수로 인해 디버깅의 어려움이 있을 수도 있습니다.

ex) #define max(x,y) ((x)>(y)?(x):(y))

이는 max함수를 매크로 함수로 정의한 것입니다.

 

1. 첫번째 문제

하지만 개발자의 실수로 바깥 괄호를 빠뜨리고 매크로 함수를 정의했다고 가정하게된다면

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

"2*max(3,2)" 이라는 수식은 -> "2*(3)>(2)?(3):(2)"로 변환하게 되고 결과 값은 3이 나옵니다. 6을 예측했지만 3이나오게 되고 이를 디버깅하기는 찾기가 어렵습니다.

 

2. 두번째 문제

그리고 매크로 함수가 재귀함수에 사용될 때, 성능 저하가 나타납니다.

-> 컴파일 전에 코드 변환이 일어나면서 코드 변환이 재귀적으로 증가하기 때문입니다.

 

결론

매크로 함수는 재귀함수에서 사용하면 안되고 속도가 중요한 프로그램이 아닌이상 매크로 함수보다는 디버깅 하기 쉬운 일반함수를 사용하는 것이 더 바람직하다고 생각됩니다.

반응형