Objective c 目标-C正确/错误与正确/错误

Objective c 目标-C正确/错误与正确/错误,objective-c,boolean,Objective C,Boolean,在Objective-C中,我们有不同的关键字来计算布尔值。我们有YES/NO,TRUE/FALSE和(c99)TRUE/FALSE。我对BOOLvsBOOL的理解非常透彻,本文精彩地解释了两者的区别: 因此,YES/NO的意思不是我的问题。我的问题是,TRUE/FALSE和TRUE/FALSE之间有什么区别?大写版本是是/否的别名还是(c99)真/假的别名?或者,它是另一种动物(比如YES/NO) 将YES和NO标识符视为BOOL的标准Objective-C文本。您通常不会在Objectiv

在Objective-C中,我们有不同的关键字来计算布尔值。我们有
YES/NO
TRUE/FALSE
(c99)TRUE/FALSE
。我对
BOOL
vs
BOOL
的理解非常透彻,本文精彩地解释了两者的区别:


因此,
YES/NO
的意思不是我的问题。我的问题是,
TRUE/FALSE
TRUE/FALSE
之间有什么区别?大写版本是
是/否
的别名还是
(c99)真/假
的别名?或者,它是另一种动物(比如
YES/NO

YES
NO
标识符视为
BOOL
的标准Objective-C文本。您通常不会在Objective-C源代码之外找到
YES
NO
BOOL
。请注意,这些标识符实际上是在
objc/objc.h
中定义的宏

true
false
标识符是标准的C99(如您所述),如果您
#包括
。请注意,因为您使用的是Objective-C,所以可能间接地包括了stdbool.h,即使您不知道它。例如,
Foundation.h
包括
CoreFoundation.h
,其中包括
stdbool.h
。因此,如果不获得
true
false
,就很难编译现代iOS或Mac应用程序

TRUE
FALSE
标识符不是标准的。它们是各种图书馆定义的历史包袱。这些库可能是在C99出现之前编写的,或者是在C99出现之后编写的,但旨在支持C99之前的编译器,或者只是由不了解C99布尔文本的作者编写的。在Mac上,此类库的一些示例是Kerberos、XDR/RPC和ncurses。最重要的是,Mach内核头定义了
TRUE
FALSE
常量,并且(与
stdbool.h
一样),如果您正在构建现代iOS或Mac应用程序,很难避免这些特定定义

在我能找到的所有情况下,
TRUE
被定义为
1
(1)
FALSE
被定义为
0
(0)


我提到的所有库,以及Mach内核,都早于C99,因此有理由定义它们自己的布尔常量


Objective-C的
BOOL
YES
NO
出现在1991年的Brad Cox's中,因此这些标识符也是合理的。

关于ncurses,真/假/BOOL用法早于c99,并从1996年起记录在XPG4诅咒中。NCURSE的配置脚本检查并使用现有的C++和C99值。例如,在我所有关于类似主题的Google和Stack文章中,请参见从

开始的ncurses change log,这是迄今为止人们所能要求的最简洁、最精确的答案。