用相同名称的typedef替换预处理器宏
Replace preprocessor macro by typedef of the same name
我想用相同名称的正确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
(事实上,undef
FooType之后对此毫无意义)。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- 如何在C++中用'\'替换''来处理转义序列?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 替换预处理器定义中的字符
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- __func__预处理输出中不替换
- 预处理/预编译-用常量替换变量
- 当宏用作变量名时,是否有任何方法可以跳过宏替换(在预处理期间)