1
VYSE 2012-01-19 16:58:59 +08:00
既然是逻辑变量,直接在if后面多合情合理?c里可以==TRUE或==FALSE
|
2
guoxx_ 2012-01-19 17:33:41 +08:00
if ( a ) {
} if ( ! a ) { } 这样有什么问题么? |
3
fly2never 2012-01-19 17:37:30 +08:00
关注这个问题.
我现在一般是if(a) if(!a), 如果a是一个表达式,就才采用 if (a == YES) if (a == NO) |
4
godwarlock OP @guoxx_ 从实现上没问题,但是觉得降低了可读性
|
5
guoxx_ 2012-01-19 17:41:04 +08:00
if(a == YES) if(a == NO)
这样写法 绝对是错误的 int a = 100; if ( a ) 和 if ( a == YES ) 完全是俩码事 |
6
guoxx_ 2012-01-19 17:42:14 +08:00
|
7
evlos 2012-01-19 18:02:49 +08:00
感觉 YES NO 什么的太奇怪了,读到会蛋疼的,正常情况下应该都用 TRUE FALSE 的吧。
|
10
fly2never 2012-01-19 18:10:00 +08:00
这篇文章里面写的是不要与'YES'/'NO'比较,也不要和@"YES"/@"NO"比较
http://www.mindsizzlers.com/2010/04/objective-c-and-the-properties-of-bool/ |
11
fly2never 2012-01-19 18:12:27 +08:00
BOOL b = 37;
if (b) { printf("b is YES!\n"); } if (b != YES) { printf("b is not YES!\n"); } 这样的话,b就最好不要直接和YES和NO比较 |
12
keakon 2012-01-19 19:06:14 +08:00
BOOL类型的变量一般用isXXX、hasXXX的形式来命名,这样if (hasError) {...}的可读性是很好的。
|
13
qianleilei 2012-01-19 20:23:50 +08:00
有时候 if(!a) 会让我想很久,前两天就是因为少一个!,出了一个bug
|
15
godwarlock OP |
16
guoxx_ 2012-01-20 09:23:33 +08:00
没想到这种问题还有这么多讨论,基本入门的教材都已经写得很清除了
代码翻译到汇编的时候 执行的都是和0比较 BOOL类型不过是objc的扩展 不同于c++的bool类型 if ( a == YES ) 这种写法在任何情况下都强烈不推荐 可读性的问题可以通过变量名解决 |
17
lldong 2012-01-20 20:07:30 +08:00
有个问题,关于BOOL的类型的问题,楼主说是unsigned int,包括一些书上也是这样说,但是我看运行时API里(/usr/include/objc/objc.h)的声明是:
typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used. #define OBJC_BOOL_DEFINED #define YES (BOOL)1 #define NO (BOOL)0 |
18
godwarlock OP @lldong 哦,sorry,这个是我弄错了
|