C: gcc 에서 매크로를 함수처럼 쓰기
C 에서 매크로는 매우 강력한 기능을 제공한다. 하지만 몇 가지 아쉬운 점이 있는데, 매크로를 일반 함수처럼 쓰기에는 어려움이 있다는 것이다. 예를 들어, 어떤 정수 m 의 어떤 정수 n 제곱을 구하는 기능을 매크로로 구현하기란 쉽지 않다. 왜냐하면 거듭제곱의 결과값을 저장할 또 다른 변수가 필요하고, 반복문이 있어야 하며, 그 결과를 돌려주려면, 결국 복합문이 필요하기 때문이다. 물론 do{}while(0) 같은 기법을 써도 되지만, 아쉽게도 이것으로는 값을 되돌려줄 수가 없다. gcc 는 이를 위해 statement expression 이라는 확장 기능을 제공한다. 위의 기능을 제공하는 매크로를 POW() 라고 하자. POW() 는 다음처럼 쓸 수 있다. Colored By Color Scripter ™ 1 2 3 4 5 6 7 8 9 #define POW( m, n ) ({ \ int POW_m = (m); \ int POW_n = (n); \ \ while ( POW_n-- > 0 ) ...