[gcc] 매크로 함수의 가변인자의 괄호 문제
글쓴이: horangs / 작성시간: 화, 2011/02/15 - 11:48오후
gcc에서 가변인자를 가지는 매크로 함수는
상당히 편리한 방식으로
#define logprint(a, fmt...) \ { \ trace((a), Fmt); \ }
와 같이 사용할 수 있죠.
그런데 초보 프로그래머라도 익히 알만한 일반적인 코딩의 규칙으로
"매크로 함수의 인자에는 괄호를 꼭 씌워라" 라는 게 있습니다.
그래서 위에서 a는 괄호를 쳤는데, 이 가변인자는 어떻게 해야할지 참으로 고민입니다..
어딜 찾아봐도 매크로 함수의 인자에 괄호 칠 생각은 안하더군요.. ^^;;
Forums:
괄호를 꼭 쓰라는 이유는, 매크로 인자가 확장될 때,
괄호를 꼭 쓰라는 이유는, 매크로 인자가 확장될 때, 연산자 우선 순위가 원하지 않는 형태로 해석되는 것을 막기 위한 것입니다. 이미 "(a)"를 썼기 때문에 가변 인자 부분은 신경 쓰지 않아도 됩니다.
"fmt..." 형태의 인자는 'named variable argument'라고 부르며, 이는 GCC 확장 기능입니다. 이미 ISO C 표준에서 매크로에서 가변 인자 처리를 지원하고 있기 때문에, 'named variable argument'를 쓸 이유는 거의 없습니다. C 표준에 맞는 방법은 아래와 같습니다:
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기