如果我在C中有一个if语句,它看起来像:
if( function1() > 0 && function2() > 0 ){
//blah
}
首先执行哪个函数并始终按该顺序执行?
答案 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.