C if语句带&am​​p;& - 首先执行哪个功能?

时间:2011-11-28 18:30:37

标签: c if-statement

如果我在C中有一个if语句,它看起来像:

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

    //blah

}

首先执行哪个函数并始终按该顺序执行?

7 个答案:

答案 0 :(得分:27)

此处function1() 保证首先执行。

&&运算符是short-circuiting operator。除非function2()的结果大于零,否则甚至不会调用function1()

来自C99标准:

  

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

答案 1 :(得分:3)

function1,是的。当且仅当前一个条件为function2时才会调用true

这称为“短路”,这是必不可少的,例如对于这样的语句:if (p != 0 && *p == 'X')我们可以确定p如果为空则永远不会被取消引用

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

这将从左到右进行评估。请查看more info

答案 5 :(得分:0)

首先会调用

function1()。它不是意味着排序的if,而是首先计算&&:左操作数,并且只有当左操作数返回非零值时才对第二个操作数进行计算。

答案 6 :(得分:0)

在您的代码段function1()将首先执行,而function2()将仅执行 ,如果第一个条件将提供true

您可以轻松查看:在每个函数中添加一些printf,让function1()返回1.