在运行时执行条件的顺序

时间:2012-05-01 15:38:24

标签: c

  

可能重复:
  Is short-circuiting boolean operators mandated in C/C++? And evaluation order?

考虑以下代码:

char* str=NULL;
if(str!=NULL && str[0]=='h')
    printf("ok");

验证的第一个条件是str不是NULL。我试图编译并运行此代码,我没有得到分段错误。
这意味着代码在if的下一个指令处中断,因为不需要进一步验证str [0]等于'h',因为它是和。 但问题是:这是否可以保证与所有编译器一起使用?不可能发生编译器生成汇编代码,由于某种原因,首先验证str是否等于'h'(导致分段错误),然后检查str是不是NULL?

2 个答案:

答案 0 :(得分:3)

是的,这是有保证的。它被称为short-circuit evaluation

根据C99标准(第6.5.13节):

  

与按位二进制&运算符不同,&&运算符保证从左到右的评估;   在评估第一个操作数后有一个序列点。如果是第一个操作数   比较等于0,不评估第二个操作数。

类似的规则适用于||;如果第一个操作数为true,则不评估第二个操作数。

答案 1 :(得分:0)

是。这就是它应该如何运作。