Pet*_*sey 19 boolean objective-c c99
从C99开始,C现在有一个合适的布尔类型_Bool.Objective-C作为C的严格超集继承了这一点,但是当它在20世纪80年代创建时,没有C布尔类型,所以Objective-C定义BOOL为signed char.
所有Cocoa都使用BOOL,就像我见过的所有非NeXT/Apple Cocoa代码一样.显然,为了与现有协议(例如,-applicationShouldTerminateAfterLastWindowClosed:来自NSApplicationDelegate)的兼容性,如果除了避免警告之外没有其他原因,则优选匹配已经声明的类型.
出于清洁/可读性的目的,stdbool.h将其定义bool为同义词_Bool,因此我们这些不希望在代码中使用不必要的下划线的人可以使用它.
其他三个有用的笔记:
@encode(_Bool)评估为"B".(@encode(BOOL)评估为"c",for signed char.)sizeof(_Bool)1从C99的定义开始计算,该定义_Bool只有保持其两个可能值所需的大小.(编辑:实际上,标准只表示它必须"足够大"才能保存这两个值;它没有上限,事实上,32位PowerPC上的Mac OS X将其定义为4个字节.在可能的BOOL-vs.- bool兼容性问题下,大小差异是另一件事.)_Bool是1和0.任何其他值在赋值时转换为其中一个,就好像你已经!!对0(!= 0)进行了双重否定()或测试不等式.获得_Bool一些其他值的唯一方法是通常的魔法:指针别名和联合.是否有任何理由不在新代码中使用_Bool/ bool?
对于 Objective-C,只需使用 BOOL 数据类型...
对于 C,我推荐以下宏,它们也适用于 ANSI-C (C-89):
#ifndef __bool_true_false_are_defined
#ifdef _Bool
#define bool _Bool
#else
#define bool char
#endif
#define true 1
#define false 0
#define __bool_true_false_are_defined 1
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |