我正在编写一个程序,我更喜欢用 C++ 编写,但是,我需要包含一个重新定义 bool 的 C 头文件:
# define false 0
# define true 1
typedef int bool;
显而易见的解决方案是编辑标题说:
#ifndef __cplusplus
# define false 0
# define true 1
typedef int bool;
#endif
但是,唉,因为图书馆是只读的,我不能。
有没有办法让 gcc 忽略这个 typedef?或者,我可以用 C++ 编写大多数函数,然后为这两个函数制作一个 C 包装器吗?或者,我应该接受它并用 C 写东西吗?
最佳答案
你可以破解它!
这个库,称为 fooLib
,认为它正在使用某种类型 bool
,它有定义它的特权。对于库来说,bool
只是一个标识符。
因此,您可以强制它使用另一个标识符:
#define bool fooLib_bool
#include "fooLib.h"
#undef bool
#undef true
#undef false
现在编译器看到有问题的行转换为:
typedef int fooLib_bool;
您使用 fooLib_bool = int
类型而不是真正的 bool
类型的界面卡住了,但这是无法解决的,因为代码实际上可能依赖于int
的属性,而库二进制文件会在编译时加入这样的假设。
关于c++ - 我可以模仿在 C++ 中重新定义 bool 的 C 头文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21966230/