如果我有一个如果的C语句,看起来像:C if语句带&& - 哪个函数会先执行?
if(function1() > 0 && function2() > 0){
//blah
}
哪个函数将执行第一和将它总是以这个顺序执行?
如果我有一个如果的C语句,看起来像:C if语句带&& - 哪个函数会先执行?
if(function1() > 0 && function2() > 0){
//blah
}
哪个函数将执行第一和将它总是以这个顺序执行?
这里function1()
是保证先执行。
&&
运营商是short-circuiting operator。除非function1()
的结果大于零,否则将不会调用function2()
。左到右
不同的是按位二进制&运算符,& &运营商保证评价;:
C99标准 评估第一个操作数后有一个序列点。如果第一个操作数 的值等于0,则不计算第二个操作数。
是不是倒退?如果'function1()> 0'为真,则必须调用'function2'。 –
啊,你的编辑修正了它。 +1。 –
function1
,是的。当且仅当先前的条件是true
时,将调用function2
。
这就是所谓的“短路”,它是必不可少的,例如像这样的语句:if (p != 0 && *p == 'X')
我们可以肯定的是p
永远不会被解除引用,如果它是空的。
哎呀,我猜你是真的。 – jman
@skjaidev:我做到了,谢谢!我脑海中有酒吧...... –
在这种特殊情况下,函数1将始终首先执行,因为您正在使用运算符& &。
此外,如果function1()> 0,则根本不会调用function2。
function1()
将首先被调用。这不是暗示排序的if
,而是&&
:首先评估左操作数,只有左操作数返回非零值时才评估第二个操作数。
function1()
将首先执行,如果结果小于或等于0 function2()
根本不执行。
这将评估从左到右。检查了这一点为more info
在您的代码段function1()
将执行第一和function2()
将执行只有如果第一个条件会给true
。
您可以轻松地检查出来:在每个功能添加一些printf和让function1()
回报1.
岂不功能1功能2之前执行,这将永远是这个顺序。如果function1失败,那么function2根本不会被执行。 – user626912