有没有办法抑制预处理器宏扩展?我有一个现有的C头文件,使用#define
来定义一组整数,我想将它复制到具有相同值名称的C ++枚举。例如(使用C ++ 11):
enum MyEnum {
VALUE,
// ...
};
#define VALUE 0
MyEnum convert(int x) {
if (x == VALUE) {
return MyEnum::VALUE;
}
// ...
}
问题当然是MyEnum::VALUE
被转换为MyEnum::0
,这会导致语法错误。最好的解决方案是用枚举替换宏,但不幸的是,在我的情况下这不是一个选项。
我尝试使用连接,但这没有帮助(编译器给出了同样的错误)。
#define CONCAT(a,b) a##b
// ...
return MyEnum::CONCAT(VA,LUE); // still results in MyEnum::0
是否有其他解决方案允许我为宏和枚举值使用相同的名称?
答案 0 :(得分:3)
您可以取消定义宏:
#undef VALUE
包含标题后。