求教,执行顺序
如下代码:
- 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的那个表达式,如果为真,才去判断后面那个;如果为假了,则无论后边结果如何,最后结果都是假,所以根本不去判断后面那个了,这就是所谓的短路运算。
这个和编译器无关,是语言决定的,楼主应该关注一下。
特别是两边是函数调用或者带++ --的,可能改变某个量的时候,短路特性就很重要了
[解决办法]