我在C中编写了一组数据结构和函数,其中一些使用_Bool数据类型.当我开始时,该项目将是纯粹的C.现在我正在研究使用基于C++的GUI工具包并将后端代码放入库中.
但是,在编译C++ GUI时,编译器会发出以下错误:
ISO C++ forbids declaration of '_Bool' with no type
我最初以为我可以搜索和替换_Bool,以bool创造:
/* mybool.h */
#ifndef MYBOOL_H
#define MYBOOL_H
typedef _Bool bool;
#endif /* MYBOOL_H */
Run Code Online (Sandbox Code Playgroud)
然后在任何使用_Bool的标头中
#ifdef __cplusplus
extern "C" {
#else
#include "mybool.h"
#endif
/* rest of header... */
Run Code Online (Sandbox Code Playgroud)
直到我意识到这将使用一个布尔(C _Bool)数据类型编译库,并使用另一个(C++ bool)链接库.实际上,这可能无关紧要,但从理论上讲,它可能确实存在(可能会有一些模糊的系统,这样做会导致宇宙向内翻).
我想我可以使用一个int并使用0表示false,将1表示为true,并使用类似的方法对其进行类型设置typedef int mybool,但它似乎没有吸引力.
有没有更好/惯用/标准的方法来做到这一点?
Ant*_*ams 11
如果您使用的C和C++编译器来自同一个供应商,那么我希望C _Bool与C++的类型相同bool,并且包括<stdbool.h>将使一切都很好地互操作.如果他们来自不同的供应商,那么您需要检查兼容性.
注意,您始终可以__cplusplus在标头中测试宏以确定代码是否正在编译为C++,并适当地设置类型.
形式上,这个问题没有解决方案。类型_Bool仅存在于 C 中。C++ 语言不提供任何类型来保证与_Bool. C++bool不保证兼容。
正确的解决方案是不要在旨在从 C++ 代码直接访问(即可链接)的 C 函数的参数声明中使用bool或_Bool。使用int,char或任何其他保证兼容的类型。
就#include <stdbool.h>和用bool。