ios中BOOL和bool的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios中BOOL和bool的区别相关的知识,希望对你有一定的参考价值。
参考技术A 说明:objective-c 中的BOOL 实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。注意:objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和 NO 值只是在习惯上的一种理解。
问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。
举例:
BOOL b1=8960; // 实际是 NO,因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO
bool b2=8960;//实际是true,因为bool类型,非0即为true。本回答被提问者和网友采纳
C中_Bool和bool类型的区别?
【中文标题】C中_Bool和bool类型的区别?【英文标题】:Difference between _Bool and bool types in C? 【发布时间】:2012-02-02 04:56:28 【问题描述】:谁能解释一下 C 中的 _Bool
和 bool
数据类型有什么区别?
例如:
_Bool x = 1;
bool y = true;
printf("%d", x);
printf("%d", y);
【问题讨论】:
bool
也必须是 typedef,C 没有那种类型。
类似于_Complex vs complex。
【参考方案1】:
这些数据类型是在 C99 中添加的。由于 bool
在 C99 之前没有保留,因此他们使用 _Bool
关键字(已保留)。
bool
是_Bool
的别名,如果您包含stdbool.h
。基本上,包含stdbool.h
标头表明您的代码可以使用标识符bool
被“保留”,即您的代码不会将其用于自己的目的(类似于标识符true
和@ 987654329@)。
【讨论】:
长期的意图似乎是该标准最终将被修订以使 bool 成为关键字。这是第 1 步,您可以在其中使用bool
成为关键字。考虑到字符串字面量的类型仍然是char *
,你仍然可以使用非原型函数声明。
@JL2210 是的,但是每个不是语言律师的人在想到 C11 时都会想到默认接受的语言(即 C11 + 默认情况下激活的任何扩展集),因此说“你不能使用非原型函数声明,因为在 C90 之后”只会让人们比现在更加困惑。
@JL2210 我会这样说:“非原型函数声明是 1989 年原始 C 标准的过时特性。它们已从标准的后续修订版中删除,但仍为现代编译器所接受为了向后兼容。不要在新代码中使用它们。"【参考方案2】:
没有区别。
bool
是在stdbool.h
中扩展为_Bool
的宏。
而true
是在stdbool.h
中展开为1 的宏
【讨论】:
以上是关于ios中BOOL和bool的区别的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发——语法OC篇&BOOL / bool / Boolean / NSCFBoolean四者区别