您的位置:首页 > 编程语言 > C语言/C++

关于C语言的逻辑短路

2010-12-25 01:36 218 查看
在C标准中,有这样的规定:
在“exp1 && exp2” 中如果exp1为false,则不再计算exp2的值
在“exp1 ¦ ¦ exp2” 中如果exp1为true,则不再计算exp2的值
这种机制被称为”逻辑短路“,一是为了优化,更重要的是为了提高代码的可移植性,避免产生二义性
但并不是所有的实现都支持这种机制
比如如下的C代码:

void cond(int a, int *p)
{
if (p && a > 0)
*p += a;
}


命名为cond.c, 用如下命令编译成汇编语言文件:
gcc -O2 -S cond.c

得到如下的.s文件:
.file	"cond.c"
.text
.p2align 4,,15
.globl _cond
.def	_cond;	.scl	2;	.type	32;	.endef
_cond:
pushl	%ebp
movl	%esp, %ebp
movl	12(%ebp), %ecx
pushl	%ebx
movl	8(%ebp), %ebx
testl	%ecx, %ecx
setne	%al
xorl	%edx, %edx
testl	%ebx, %ebx
setg	%dl
testl	%eax, %edx
je	L1
addl	%ebx, (%ecx)
L1:
popl	%ebx
popl	%ebp
ret

这里就没有采用逻辑短路机制,&&前后的两个条件都进行了计算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: