Programming
매크로의 가변인자를 또 다른 매크로로 넘기기
김재호
2012. 4. 16. 18:02
살다보면(?) 매크로에서 받는 가변 인자를 또 다른 매크로로 쑤셔넣고 싶은 경우가 있다.
#define MACRO_1(a, b, c) fn(a, b, c) #define MACRO(...) MACRO_1(__VA_ARGS__)
짠, 이렇게 하면 된다.
그렇다. 아무 테크닉이 필요없이 그냥 쑤셔넣으면 된다.
그런데 위 코드는 GCC에서는 잘 동작하지만 VC에서는 동작하지 않는다. 그렇다고 해서 가변인자는 다른 매크로로 건넬 수가 없구나 하고 오해하면 안된다. 이것은 그냥 비주얼 스튜디오의 버그일 뿐이다.
#define MACRO_1(a, b, c) fn(a, b, c) #define MACRO_1_(args_list) MACRO_1 args_list #define MACRO(...) MACRO_1_((__VA_ARGS__))
비주얼 스튜디오에서는 위와 같은 얍삽이를 통해서 이를 회피할 수 있다. __VA_ARGS__ 주위를 한 겹 더 괄호로 둘러싸서 또 다른 매크로로 넘기는 것을 주의해서 봐야한다.
그래서 내가 하고 싶은 말은,
이 버그가 정말 거지 같다고 생각된다면
http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement
여기 가서 upvote를 해주세요.