3

我知道,这bool是在 C++ 中使用的,而BOOL它是 Microsoft 特定的类型,被定义为int.

我的代码正在使用BOOL,因为它是为 Windows 开始的,但是BOOL当我将它移植到 Mac 时,我试图在不将代码从 bool 更改为 bool 的情况下保持相同的方式。

像这样的东西可以吗?

    typedef int8_t _Bool;         
    typedef _Bool (BOOL);
    static const BOOL False = 0;
    static const BOOL True = 1;

如果是,有没有更好的方法,为什么?
如果不是,那么为什么以及我应该怎么做?

4

4 回答 4

7

我不明白为什么一个好的 IDE 不能将全局从 BOOL 更改为 bool。我宁愿有更大的便携性。我不喜欢 typedef,因为它更难阅读。

于 2012-06-20T10:16:43.540 回答
3

我看到滚动你自己的最大问题bool是识别的模板规范bool将无法识别BOOL,采用默认路线。具体来说,vector<bool>使用不同的代码库通过将位打包到向量的表示中来节省空间;usingvector<BOOL>将导致大约八倍大的表示。

于 2012-06-20T10:18:37.563 回答
1

您可以在最顶层的头文件中执行以下操作:

#ifndef /* MICROSOFT specific macro */
typedef bool BOOL;
static const BOOL True  = true;  // True  or TRUE
static const BOOL False = false; // False or FALSE
#endif

其他选项可以使用编译时选项来预定义宏,例如g++ -DBOOL=bool

于 2012-06-20T10:16:30.240 回答
1

由于被BOOL定义. int_int

因此,我会选择类似的东西:

#if NOT_MICROSOFT
    typedef int BOOL;
    #define TRUE 1
    #define FALSE 0
#endif

如果您有机会检查您移植的代码是否可以正常工作,无论类型BOOL是真的int还是真的bool,那么您很可能有机会将其更改为使用bool(或使用int8_t,无论您喜欢什么)。

于 2012-06-20T11:31:52.930 回答