如果我在C中有一个if语句,它看起来像:
if( function1() > 0 && function2() > 0 ){ //blah }
哪个函数将首先执行并始终按该顺序执行?
这里function1()
保证首先执行。
&&
运算符是一个短路运算符 。 除非function1()
的结果大于零,否则甚至不会调用function1()
。
从C99标准:
与按位二元和运算符不同,&&运算符保证从左到右的评估; 在评估第一个操作数后有一个序列点。 如果第一个操作数比较等于0,则不计算第二个操作数。
首先执行function1()
,如果结果小于或等于0,则根本不执行function2()
。
function1
,是的。 当且仅当前一个条件为true
才会调用function2
。
这被称为“短路”,并且它是必不可少的,例如对于这样的语句: if (p != 0 && *p == 'X')
我们可以确定p
如果为null则永远不会被解除引用。
在这种特殊情况下,函数1将始终首先执行,因为您正在使用&&运算符。
另外,如果function1()> 0,则根本不会调用function2。
这将从左到右进行评估。 查看此信息以获取更多信息
首先调用function1()
。 它不是暗示排序的if
,而是首先计算&&
:left操作数,并且仅当左操作数返回非零值时才计算第二个操作数。
在你的代码片段中, function1()
将首先执行,而function2()
只有在第一个条件为true
才会执行。
您可以轻松检查出来:在每个函数中添加一些printf,让function1()
返回1。
需要了解更多c/c++开发分享C if语句带&& – 首先执行哪个函数?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享C if语句带&& – 首先执行哪个函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979422.html