我知道,bool
用于C ++,而BOOL
是Microsoft特定类型,定义为int
。
我的代码正在使用BOOL
,因为它是为Windows开始的,但我试图保持相同的方式而不将我的代码从BOOL
更改为bool,当我是将它移植到Mac。
这样的事可以吗?
typedef int8_t _Bool;
typedef _Bool (BOOL);
static const BOOL False = 0;
static const BOOL True = 1;
如果是,是否有更好的方法和原因?
如果没有,那么为什么以及我应该做什么呢?
答案 0 :(得分:6)
我不明白为什么一个好的IDE无法从BOOL到bool进行全局变更。我希望有更大的便携性。我不喜欢typedef,因为它更难阅读。
答案 1 :(得分:3)
我在滚动您自己的bool
时遇到的最大问题是,识别bool
的模板规范无法识别BOOL
,而是采用默认路由。具体来说,vector<bool>
使用不同的代码库来通过在向量的表示中打包位来节省空间;使用vector<BOOL>
将导致表示大约大八倍。
答案 2 :(得分:2)
您可以在最顶层的头文件中执行以下操作:
#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
答案 3 :(得分:1)
由于BOOL
被定义为int
,所以如果不检查某些代码是否以某种方式移植依赖,那么你就不知道int
是#if NOT_MICROSOFT
typedef int BOOL;
#define TRUE 1
#define FALSE 0
#endif
1}}。
因此,我会选择以下内容:
BOOL
如果您有机会检查您移植的代码是否能正常工作,无论int
类型是bool
还是bool
,那么您很可能拥有有机会将其更改为使用int8_t
(或使用{{1}},无论您喜欢什么)。