3 回答
TA贡献2041条经验 获得超4个赞
如上所述,BOOL是一个签名字符。bool - 来自C99标准(int)的类型。
BOOL - 是/否。bool - 真/假。
见例子:
bool b1 = 2;if (b1) printf("REAL b1 \n");if (b1 != true) printf("NOT REAL b1 \n");BOOL b2 = 2;if (b2) printf("REAL b2 \n");if (b2 != YES) printf("NOT REAL b2 \n");
结果是
REAL b1
REAL b2
NOT REAL b2
注意bool!= BOOL。以下结果仅为ONCE AGAIN - REAL b2
b2 = b1;if (b2) printf("ONCE AGAIN - REAL b2 \n");if (b2 != true) printf("ONCE AGAIN - NOT REAL b2 \n");
如果你想将bool转换为BOOL,你应该使用下一个代码
BOOL b22 = b1 ? YES : NO; //and back - bool b11 = b2 ? true : false;
所以,在我们的案例中:
BOOL b22 = b1 ? 2 : NO;if (b22) printf("ONCE AGAIN MORE - REAL b22 \n");if (b22 != YES) printf("ONCE AGAIN MORE- NOT REAL b22 \n");
那么......我们现在得到了什么?:-)
TA贡献1868条经验 获得超4个赞
在撰写本文时,这是objc.h的最新版本:
/// Type to represent a boolean value.
#if (TARGET_OS_IPHONE && __LP64__) || TARGET_OS_WATCH
#define OBJC_BOOL_IS_BOOL 1
typedef bool BOOL;
#else
#define OBJC_BOOL_IS_CHAR 1
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#endif
这意味着在64位iOS设备和WatchOS BOOL上完全相同,bool而在所有其他设备(OS X,32位iOS)上,它signed char甚至无法被编译器标志覆盖-funsigned-char
它还意味着此示例代码将在不同平台上以不同方式运行(我自己测试):
int myValue = 256;
BOOL myBool = myValue;
if (myBool) {
printf("i'm 64-bit iOS");
} else {
printf("i'm 32-bit iOS");
}
BTW从未分配之类的东西array.count来BOOL的变量,因为可能值的约0.4%将是负面的。
- 3 回答
- 0 关注
- 531 浏览
添加回答
举报