t*****n 发帖数: 167 | 1 if ((node==NULL) || (node->next == NULL))
这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应
该要拆成两句吗?
if (node==NULL)
。。。。。。。。。。。。。。;
if (node-〉next == NULL)
。。。。。。。。。。。。。。。。。。。;
想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第
二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认
一下。 |
P********e 发帖数: 2610 | 2 对,写在一起方便
以前有面食题就是考这个的
【在 t*****n 的大作中提到】 : if ((node==NULL) || (node->next == NULL)) : 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应 : 该要拆成两句吗? : if (node==NULL) : 。。。。。。。。。。。。。。; : if (node-〉next == NULL) : 。。。。。。。。。。。。。。。。。。。; : 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第 : 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认 : 一下。
|
E*V 发帖数: 17544 | 3 这个市C的臭规矩,只看第一个,如果第一个true的话
【在 t*****n 的大作中提到】 : if ((node==NULL) || (node->next == NULL)) : 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应 : 该要拆成两句吗? : if (node==NULL) : 。。。。。。。。。。。。。。; : if (node-〉next == NULL) : 。。。。。。。。。。。。。。。。。。。; : 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第 : 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认 : 一下。
|
t*****n 发帖数: 167 | 4 确实这样,改成
if((head->next == NULL) || (head == NULL) )
在head=NULL的情况,会crash
【在 E*V 的大作中提到】 : 这个市C的臭规矩,只看第一个,如果第一个true的话
|
g*****g 发帖数: 34805 | 5 No, if node==NULL is true, the 2nd condition won't be executed.
【在 t*****n 的大作中提到】 : if ((node==NULL) || (node->next == NULL)) : 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应 : 该要拆成两句吗? : if (node==NULL) : 。。。。。。。。。。。。。。; : if (node-〉next == NULL) : 。。。。。。。。。。。。。。。。。。。; : 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第 : 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认 : 一下。
|
p****f 发帖数: 251 | 6 that is called short-circuit evaluation. If node==NULL, the second boolean
function will not be evaluated.
【在 t*****n 的大作中提到】 : if ((node==NULL) || (node->next == NULL)) : 这句话是不是有问题,如果考虑 node = NULL的情况,第二个条件会引起异常吗? 应 : 该要拆成两句吗? : if (node==NULL) : 。。。。。。。。。。。。。。; : if (node-〉next == NULL) : 。。。。。。。。。。。。。。。。。。。; : 想问一下编译器是怎么处理这个条件语句的?如果第一个条件成立,是不是就不检测第 : 二个条件了? 还是两个条件都检查。我写程序测试了一下,似乎没什么问题,想确认 : 一下。
|
l*****c 发帖数: 1153 | 7 条件短路不是一定的。绝大多数编译器会这么做,但是可以关掉的。
【在 P********e 的大作中提到】 : 对,写在一起方便 : 以前有面食题就是考这个的
|
t****t 发帖数: 6806 | 8 name a C/C++ compiler that has this option?
【在 l*****c 的大作中提到】 : 条件短路不是一定的。绝大多数编译器会这么做,但是可以关掉的。
|
l*****c 发帖数: 1153 | 9 嗯,查了一下,我错了。C99已经规定必须short-circuit了。sigh,我怎么记得看到过
这个选项?可能不是C++编译器?
【在 t****t 的大作中提到】 : name a C/C++ compiler that has this option?
|
t****t 发帖数: 6806 | 10 i think short-circuit evaluation is defined in k&r...i could be wrong, but
it's definitely in c89.
you probably meant pascal.
【在 l*****c 的大作中提到】 : 嗯,查了一下,我错了。C99已经规定必须short-circuit了。sigh,我怎么记得看到过 : 这个选项?可能不是C++编译器?
|
l*****c 发帖数: 1153 | 11 嗯,又查了一下,是我看错了,K&R里面定义的。我就是奇怪,我怎么就记得看到过可
以关掉的呢?
【在 t****t 的大作中提到】 : i think short-circuit evaluation is defined in k&r...i could be wrong, but : it's definitely in c89. : you probably meant pascal.
|
l*****c 发帖数: 1153 | 12 嗯,估计是Pascal了,当年用的多啊
【在 t****t 的大作中提到】 : i think short-circuit evaluation is defined in k&r...i could be wrong, but : it's definitely in c89. : you probably meant pascal.
|