我有一个宏TYPELIST,它接受可变参数。我想要像
这样的东西typedef TYPELIST(A
,B
,C
,D
#ifdef BLA_
,E
#endif
,F)
这与gcc完美配合。但是,当我尝试使用MSVC编译它时,它将ifdef和endif解析为宏参数。我知道一种方法是将宏调用放在ifdef中。但是,如果我有一个庞大的列表,并且如果我想根据定义的不同宏包含不同的类,那将变得乏味。是否有一个特殊的原因可以解释为什么它适用于gcc而不适用于MSVC?
答案 0 :(得分:0)
在宏中使用#ifdef是不合法的。我很惊讶gcc允许这样做。我担心你必须把#ifdef放在整个定义的周围,即
#ifdef BLA_
typedef TYPELIST(a,b,c,d,e,f)
#else
typedef TYPELIST(a,b,c,d,f)
#endif
答案 1 :(得分:0)
根据标准(§16.3.4/ 3),“结果完全
宏替换的预处理标记序列未被处理为
一个预处理指令,即使它类似于一个,[。]“。如果
g ++在这里处理#ifdef/#endif
,这是一个错误
编译器(至少如果您要求标准符合性,
例如与-std=...
)。