GCC if调度
在C语言中,使用GCC编写if语句时,如下所示:GCC if调度,c,gcc,C,Gcc,在C语言中,使用GCC编写if语句时,如下所示: if(function()| A==B) 我们可以考虑,如果A等于B,函数()不被执行吗? 如果语句是这样写的: if(A==B | | function()) 我知道,如果我们希望每次都执行语句,那么在语句之前调用函数更为明确,但我读到的代码是这样的。C语言要求短路运算符|和&&从左到右处理操作数。因此,它将始终计算左操作数,但右操作数将按条件计算。对于| |,如果左操作数为false,则计算右操作数。对于&&,如果左操作数为真,则它将计算右操
if(function()| A==B)
我们可以考虑,如果A等于B,函数()不被执行吗? 如果语句是这样写的:
if(A==B | | function())
我知道,如果我们希望每次都执行语句,那么在语句之前调用函数更为明确,但我读到的代码是这样的。C语言要求短路运算符
|
和&&
从左到右处理操作数。因此,它将始终计算左操作数,但右操作数将按条件计算。对于| |
,如果左操作数为false,则计算右操作数。对于&&
,如果左操作数为真,则它将计算右操作数
所以秩序肯定很重要function()|| A==B
调用该函数。如果返回false,它将测试A==B
。但是A==B | | function()
首先测试A==B
,并且仅在它们不相等时调用该函数
这不是特定于GCC的,它是语言规范的一部分(在许多其他语言中也是类似的)。它也与if
无关,因为您可以在允许表达式的任何位置使用逻辑运算符,例如
int foo = function() || A==B;
回答你的问题了吗?请注意,顺序非常重要,if(a()| | b())
将仅在返回true
时调用a
,而if(b()| a())
将在b
返回false时调用b
和a
(按此顺序)。