关于C语言的逻辑短路

在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 
这里就没有采用逻辑短路机制,&&前后的两个条件都进行了计算

你可能感兴趣的:(关于C语言的逻辑短路)