c++ - 我可以模仿在 C++ 中重新定义 bool 的 C 头文件吗?

标签 c++ c typedef mixing

我正在编写一个程序,我更喜欢用 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/

相关文章:

c++ - 使用 boost-asio 时实时将缓冲区写入磁盘

c - MakeFile:错误:<jni.h>:没有这样的文件或目录

c++ - -fPIC 总是一个坏主意吗?

带有 typedef 函数指针的 const 限定符

C++模板化类和构造函数中的init

c++ - 我应该使用 SQLite3 bind_int 函数吗?

c++ - 禁止碰撞的 unordered_map

c++ - 如何在opencv中进行镜头校正

c - gcc 优化给出无限循环或段错误

c - 当 typedef 是全局而非局部时,为什么定义与函数同名的 typedef 会出错?