作者:陆星星陆星星风_586 | 来源:互联网 | 2023-05-24 10:50
在Objective-C中,我们有不同的关键字来评估布尔值.我们有YES/NO
,TRUE/FALSE
和(c99) true/false
.我很了解BOOL
vs bool
,这篇文章奇妙地解释了这些差异:
http://www.bignerdranch.com/blog/bools-sharp-corners/
那么什么YES/NO
意思不是我的问题.我的问题是,TRUE/FALSE
和之间有什么区别true/false
?大写版本是别名YES/NO
还是别名(c99) true/false
?或者,它是另一种动物(像YES/NO
)?
1> rob mayoff..:
在YES
和NO
标识被认为是标准的Objective-C的文字的BOOL
.您通常不会找到YES
,NO
或BOOL
在Objective-C源代码之外.请注意,这些标识符实际上是在中定义的宏objc/objc.h
.
在true
和false
标识是标准C99(正如你指出),如果你#include
.请注意,由于您使用的是Objective-C stdbool.h
,即使您不知道,也可能间接包含它.例如,Foundation.h
包括CoreFoundation.h
,包括stdbool.h
.因此很难编译现代的iOS或Mac应用程序而没有得到true
和false
.
在TRUE
和FALSE
标识不规范.它们是各种图书馆定义的历史包袱.这些库可能是在C99出现之前编写的,或者是为了支持C99之前的编译器而编写的,或者只是由不了解C99布尔文字的作者编写的.在Mac上,此类库的一些示例是Kerberos,XDR/RPC和ncurses.最重要的是,Mach内核头文件定义TRUE
和FALSE
常量,并且(如同stdbool.h
)如果你正在构建一个现代的iOS或Mac应用程序,很难避免这些特定的定义.
在所有的情况下,我能找到的,TRUE
被定义为1
或(1)
与FALSE
被定义为0
或(0)
.
(我提到的所有库和Mach内核都早于C99,因此在定义它们自己的布尔常量时是合理的.)