4

我想用具有相同名称的正确 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用适当的类型替换宏并在之后取消定义宏?或者这是不可能的?

4

2 回答 2

9

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

typedef FooType
#undef FooType
FooType;
于 2012-07-24T15:41:51.697 回答
0

为什么不简单

#undef FooType
typedef char* FooType

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

于 2012-07-24T15:15:47.537 回答