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

Replace preprocessor macro by typedef of the same name

本文关键字:替换 预处理 处理器 typedef      更新时间:2023-10-16

我想用相同名称的正确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,然后取消定义宏?或者这是不可能的?

typedef声明通常在一行上,但行号对编译器来说毫无意义。

typedef FooType
#undef FooType
FooType;

为什么不简单地

#undef FooType
typedef char* FooType

您得到的输出是正确的,因为您指示预处理器将TMP_MACRO替换为FooType(事实上,undefFooType之后对此毫无意义)。