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 中的 _Boolbool 数据类型有什么区别?

例如:

 _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 宏,并且您仍然可以出于自己的邪恶目的取消定义或重新定义它。第 2 步将拒绝从 取消定义或重新定义 bool 以阻止此类恶作剧。然后第 3 步是使 bool 成为与 _Bool 完全相同的关键字并标记 _Bool 已弃用。在这条漫长道路的尽头(比如说,从现在开始的一两年)标准 C 代码将拥有一个 bool 类型,而新程序员不会知道它曾经缺少过一个。 我不明白为什么这必须花费两年时间,因为这是一个非常明显的改进。不喜欢这种变化的代码仍然可以使用当前的编译器版本进行编译。 我认为 C 标准永远不会被修改为使 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四者区别

C中_Bool和bool类型的区别?

BOOL和bool的区别

BOOL和bool的区别

Objective-C 中的 bool、Boolean 和 BOOL 之间有啥区别吗?

java布尔类型变量bool,判断 true ==bool与bool==true区别