Media Log

살다보면(?) 매크로에서 받는 가변 인자를 또 다른 매크로로 쑤셔넣고 싶은 경우가 있다.

#define MACRO_1(abcfn(a, b, c) #define MACRO(...) MACRO_1(__VA_ARGS__)

짠, 이렇게 하면 된다.

그렇다. 아무 테크닉이 필요없이 그냥 쑤셔넣으면 된다.

그런데 위 코드는 GCC에서는 잘 동작하지만 VC에서는 동작하지 않는다. 그렇다고 해서 가변인자는 다른 매크로로 건넬 수가 없구나 하고 오해하면 안된다. 이것은 그냥 비주얼 스튜디오의 버그일 뿐이다.

#define MACRO_1(abcfn(abc)
#define MACRO_1_(args_listMACRO_1 args_list
#define MACRO(...) MACRO_1_((__VA_ARGS__))

비주얼 스튜디오에서는 위와 같은 얍삽이를 통해서 이를 회피할 수 있다. __VA_ARGS__ 주위를 한 겹 더 괄호로 둘러싸서 또 다른 매크로로 넘기는 것을 주의해서 봐야한다.


그래서 내가 하고 싶은 말은,


이 버그가 정말 거지 같다고 생각된다면

http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement

여기 가서 upvote를 해주세요.