2011年(94)
分类: C/C++
2011-04-07 14:41:54
大家都知道现在的所有编译器都会对用户代码进行优化,尽量保证最高性能的代码。
但是没有任何的现象能证明它对代码做了优化处理(也许是大家根本没有关注过)。
我今天无意间发现了代码调试的一个“问题”:
在vc里建立个标准C的工程,输入如下代码
- void main()
- {
- int a;
- a=0;
- if (a == 0)
- {
- return;
- }
- }
然后用F10单步跟踪,你会发现执行完 a=0 这句后就直接跳到了程序结尾的" } "处 。
而 if (a == 0) 根本就没有执行。
看看代码的逻辑, 当执行完a=0后,无论下面的条件是否成立执行的结果是一样的,return的作用是到直接程序结尾,跳过判断的话同样是到程序结尾,所以 if 直接被和谐了。
代码修改该成
- void main()
- {
- int a;
- a=0;
- if (a == 0)
- {
- a=0;
- return;
- }
- }
这样就不同了, 是否进入条件判断就会影响到执行不同效果的代码了。
其实我觉得优化的还不够,对于后面2种情况,明显的只有一个赋值语句,而且所赋的值就是条件里的原值,编译器如果仍然把他们和谐掉才牛x呢。不过这是我想当然的效果,可能实现上有不可逾越的鸿沟。