Objective c 目标-C正确/错误与正确/错误
在Objective-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
YES/NO
,TRUE/FALSE
和(c99)TRUE/FALSE
。我对BOOL
vsBOOL
的理解非常透彻,本文精彩地解释了两者的区别:
因此,
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,这是迄今为止人们所能要求的最简洁、最精确的答案。