我想用具有相同名称的正确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
并在之后取消定义宏?或者这不可能吗?
答案 0 :(得分:9)
typedef
声明通常在一行上,但行号对编译器没有任何意义。
typedef FooType
#undef FooType
FooType;
答案 1 :(得分:0)
为什么不简单
#undef FooType
typedef char* FooType
您获得的输出是正确的,因为您指示预处理器将TMP_MACRO
替换为FooType
(之后您undef
FooType的计数与此无关。