매크로의 가변인자를 또 다른 매크로로 넘기기
2012. 4. 16. 18:02 |
Programming
살다보면(?) 매크로에서 받는 가변 인자를 또 다른 매크로로 쑤셔넣고 싶은 경우가 있다.
#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를 해주세요.
'Programming' 카테고리의 다른 글
윈도우즈 PE 파일의 구조 (0) | 2013.03.24 |
---|---|
윈도8에서의 UAC 관련 중요한 변화 (0) | 2012.05.28 |
내가 좋아하는 국내 프로그래밍 블로그들 (11) | 2012.04.12 |
CString 의 비밀 (6) | 2012.04.12 |
쉘의 파일 오퍼레이션을 잡아챌 수 있는 ICopyHook 인터페이스 (0) | 2012.04.06 |