在C标准中,有这样的规定:
在“exp1 && exp2” 中如果exp1为false,则不再计算exp2的值
在“exp1 ¦ ¦ exp2” 中如果exp1为true,则不再计算exp2的值
这种机制被称为”逻辑短路“,一是为了优化,更重要的是为了提高代码的可移植性,避免产生二义性
但并不是所有的实现都支持这种机制
比如如下的C代码:
命名为cond.c, 用如下命令编译成汇编语言文件:
gcc -O2 -S cond.c
得到如下的.s文件:
这里就没有采用逻辑短路机制,&&前后的两个条件都进行了计算