2011-11-28 70 views
8

如果我有一个如果的C语句,看起来像:C if语句带&& - 哪个函数会先执行?

if(function1() > 0 && function2() > 0){ 

    //blah 

} 

哪个函数将执行第一和将它总是以这个顺序执行?

+1

岂不功能1功能2之前执行,这将永远是这个顺序。如果function1失败,那么function2根本不会被执行。 – user626912

回答

21

这里function1()保证先执行。

&&运营商是short-circuiting operator。除非function1()的结果大于零,否则将不会调用function2()。左到右

不同的是按位二进制&运算符,& &运营商保证评价;:

C99标准 评估第一个操作数后有一个序列点。如果第一个操作数 的值等于0,则不计算第二个操作数。

+0

是不是倒退?如果'function1()> 0'为真,则必须调用'function2'。 –

+0

啊,你的编辑修正了它。 +1。 –

3

function1,是的。当且仅当先前的条件是true时,将调用function2

这就是所谓的“短路”,它是必不可少的,例如像这样的语句:if (p != 0 && *p == 'X')我们可以肯定的是p永远不会被解除引用,如果它是空的。

+0

哎呀,我猜你是真的。 – jman

+0

@skjaidev:我做到了,谢谢!我脑海中有酒吧...... –

1

在这种特殊情况下,函数1将始终首先执行,因为您正在使用运算符& &。

此外,如果function1()> 0,则根本不会调用function2。

0

function1()将首先被调用。这不是暗示排序的if,而是&&:首先评估左操作数,只有左操作数返回非零值时才评估第二个操作数。

3

function1()将首先执行,如果结果小于或等于0 function2()根本不执行。

0

在您的代码段function1()将执行第一和function2()将执行只有如果第一个条件会给true

您可以轻松地检查出来:在每个功能添加一些printf和让function1()回报1.