代码之家  ›  专栏  ›  技术社区  ›  James Morris

_Bool和Bool:如何解决使用Bool的C库的问题?

  •  16
  • James Morris  · 技术社区  · 14 年前

    我用C编写了一组数据结构和函数,其中一些使用了\u 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 */
    

    #ifdef __cplusplus
    extern "C" {
    #else
    #include "mybool.h"
    #endif
    
    /* rest of header... */
    

    直到我意识到这将用一个布尔(C,BoOL)数据类型编译库,并使用另一个(C++ BoOL)链接到库。实际上,这可能无关紧要,但从理论上讲,它可能是有意义的(也许某处有一个模糊的系统,这样做会导致宇宙由内向外翻转)。

    我想我可以用int,用0表示false,用1表示true,然后用 typedef int mybool

    5 回复  |  直到 14 年前
        1
  •  11
  •   Anthony Williams    14 年前

    _Bool 与C++相同 bool <stdbool.h> 将使一切都很好地互操作。如果它们来自不同的供应商,那么您需要检查兼容性。

    注意,您始终可以测试 __cplusplus 在您的头中宏来确定代码是否被编译为C++,并适当地设置类型。

        2
  •  4
  •   AnT stands with Russia    11 年前

    从形式上说,这个问题没有解决办法。类型 _Bool 只存在于C++语言中,它不提供任何类型的二进制兼容性。 _布尔 . C++ bool 不保证兼容。

    布尔 _布尔 在C函数的参数声明中,这些代码声明是直接从C++代码直接访问的(即可链接的)。使用 int , char

        3
  •  4
  •   Zoe - Save the data dump 张群峰    6 年前

    只是 #include <stdbool.h> 使用 bool

        4
  •  2
  •   argentinator    11 年前

    bool 在任何项目中,为了与C++有兼容性,如果需要的话。

    _Bool 在C99中存在,以避免与可能存在的版本冲突 布尔 程序员可以在标准C99之前定义。 因此,我认为用这个词 是C99标准化委员会的真正愿望,但它不得不通过定义丑陋的词来围绕不兼容的问题 . 这表明程序员可能必须使用“预期”这个词 布尔 在他/她的项目中。它是最符合逻辑的词来声明 布尔型 在程序中。

    布尔 布尔 中定义的版本 <stdbool.h> 程序员必须决定在每种情况下什么是更好的,此外,可能还要考虑是否需要逐步迁移到 < 是一个好的行动。

    布尔 定义于 <

        5
  •  -6
  •   doron    14 年前

    使用 typedef int _Bool