关于C语言的逻辑短路
2010-12-25 01:36
218 查看
在C标准中,有这样的规定:
在“exp1 && exp2” 中如果exp1为false,则不再计算exp2的值
在“exp1 ¦ ¦ exp2” 中如果exp1为true,则不再计算exp2的值
这种机制被称为”逻辑短路“,一是为了优化,更重要的是为了提高代码的可移植性,避免产生二义性
但并不是所有的实现都支持这种机制
比如如下的C代码:
命名为cond.c, 用如下命令编译成汇编语言文件:
gcc -O2 -S cond.c
得到如下的.s文件:
这里就没有采用逻辑短路机制,&&前后的两个条件都进行了计算
在“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语言总结-关于逻辑短路
- 关于C语言的逻辑短路
- C语言 逻辑短路
- C语言面试题---逻辑短路问题
- 关于C语言中逻辑运算和位运算的差别(记一笔)
- 关于逻辑表达式的“短路效应”
- C语言逻辑运算短路
- C语言逻辑运算短路(与运算、或运算)
- c语言中的逻辑运算符都是短路运算符
- C语言(10)--逻辑短路问题、显示安装进度、Bessel函数、消除多余的空格
- [Python]关于return逻辑判断和短路逻辑
- 关于“短路逻辑”问题
- 关于C语言数组利用指针排序的问题
- 关于 c语言的编译 和编译后程序的运行 分类: 嵌入式开发学习 2011-03-29 19:57 909人阅读 评论(0) 收藏
- 关于公文签名的实现逻辑
- c++中关于逻辑预算的优先级问题
- 逻辑与(&)和逻辑或(|) VS 短路与(&&)和短路或(||)
- 关于C语言中的malloc和free函数的用法
- c语言由一个小问题引发的关于gets和scanf的探究
- 关于 最短路条数 和 边不可重复最短路条数问题 /hdu3599(边不可重复最短路)