使用相同名称的typedef替换预处理器宏

时间:2012-07-24 15:12:37

标签: c++ macros c-preprocessor

我想用具有相同名称的正确typedef替换宏。我有

#define FooType char*

在第三方库中,这打破了我的一些代码(更准确地说:我被迫使用的一些代码以及我自己无法改变的代码)。我想用一个同名的typedef替换它,然后用#undef宏替换它。我尝试过类似的东西:

#define TMP_MACRO FooType
#undef FooType
typedef TMP_MACRO FooType;
#undef TMP_MACRO

但预处理器将其扩展为:

typedef FooType FooType;

(至少那是g++ -E告诉我的)。因此,宏TMP_MACRO不会立即扩展。由于'FooType'不存在,因此无法编译。

如何用适当的类型替换宏FooType并在之后取消定义宏?或者这不可能吗?

2 个答案:

答案 0 :(得分:9)

typedef声明通常在一行上,但行号对编译器没有任何意义。

typedef FooType
#undef FooType
FooType;

答案 1 :(得分:0)

为什么不简单

#undef FooType
typedef char* FooType

您获得的输出是正确的,因为您指示预处理器将TMP_MACRO替换为FooType(之后您undef FooType的计数与此无关。