读书人

求教实施顺序

发布时间: 2012-09-12 09:21:30 作者: rapoo

求教,执行顺序
如下代码:

C/C++ code
if(a > 0 && b > 0){    //some code}

请问是先判断a还是判断b?

[解决办法]
C/C++ code
gcc是从左往右判断,实验如下:  1 #include <stdio.h>  2 #include <stdlib.h>  3 #include <string.h>  4 #include<unistd.h>  5 #include <time.h>  6   7 int main()  8 {  9 >---int a = -2, b = -3; 10 >---  if(((a ++) > 0) && ((b ++) > 0 ))- 11 >---  {-   12 >--->---  //some code- 13 >---  } 14 >---  printf("a=%d, b=%d\n", a, b); 15 }[root@bogon temp]# ./tempa=-1, b=-3
[解决办法]
先判断a

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

[解决办法]
&& 好像是逻辑与运算符吧,也是个短路运算符

这个C语言有严格规定

必须是严格按照从左到右的顺序

先判断 关于a的那个表达式,如果为真,才去判断后面那个;如果为假了,则无论后边结果如何,最后结果都是假,所以根本不去判断后面那个了,这就是所谓的短路运算。

这个和编译器无关,是语言决定的,楼主应该关注一下。
特别是两边是函数调用或者带++ --的,可能改变某个量的时候,短路特性就很重要了

[解决办法]
探讨

一说这个问题我又想到了这个了
y=++i+ ++i
到底是先执行前面一个还是后面一个呢,其实就是undefined行为而已,不必深究的,是跟编译器有关的

读书人网 >C语言

热点推荐