在C标准中,有这样的规定:在“exp1 && exp2” 中如果exp1为false,则不再计算exp2的值 在“exp1 ¦ ¦ exp2” 中如果exp1为true,则不再计算exp2的值 这种机制被称为”逻辑短路“,一是为了优化,更重要的是为了提高代码的可移植性,避免产生二义性但并不是所有的实现都支持这种机制比如如下的C代码:view plaincopy to clipboardprint?void cond(int a, int *p) { if (p && a > 0) *p += a; } void cond(int a, int *p){ if (p && a > 0) *p += a;} 命名为cond.c, 用如下命令编译成汇编语言文件:gcc -O2 -S cond.c得到如下的.s文件:view plaincopy to clipboardprint?.file "cond.c" .text .p2align 4,,15 globl _cond .def _cond; .scl 2; .type 32; .endef cond: pushl