在Objective-C中,我们有不同的关键字来评估布尔值.我们有YES/NO,TRUE/FALSE和(c99) true/false.我很了解BOOLvs bool,这篇文章奇妙地解释了这些差异:
http://www.bignerdranch.com/blog/bools-sharp-corners/
那么什么YES/NO意思不是我的问题.我的问题是,TRUE/FALSE和之间有什么区别true/false?大写版本是别名YES/NO还是别名(c99) true/false?或者,它是另一种动物(像YES/NO)?
rob*_*off 17
在YES和NO标识被认为是标准的Objective-C的文字的BOOL.您通常不会找到YES,NO或BOOL在Objective-C源代码之外.请注意,这些标识符实际上是在中定义的宏objc/objc.h.
在true和false标识是标准C99(正如你指出),如果你#include <stdbool.h>.请注意,由于您使用的是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,因此在定义它们自己的布尔常量时是合理的.)