C if语句带&& – 首先执行哪个函数?

如果我在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。