运行我的代码并单步执行后,我发现跳过以下两行:
cCheck_sum = '\0';
cpInternal = &cpData[0];
如果我回到我的代码并反汇编它,我发现编译器不会为它生成汇编指令。我知道有时编译器会认为这些行不会影响前面的代码并跳过它,但我不知道是否是这种情况我需要初始化变量,因此它必须逐步执行它。
我正在使用FreeScale CodeWarrior编译器IDE 5.9.0
谢谢你, 尼尔
答案 0 :(得分:2)
编译器可能会对您的代码进行一些优化。此document表示(在页面145中)对您正在使用的编译器存在此类优化(如果我找到了正确的引用:P)。它还说明了如何在IDE中禁用这些优化,或者在代码中添加#pragma
。
似乎可以通过“[...> 全局优化设置面板”来控制优化。
答案 1 :(得分:0)
编译器可以自由地移动代码,将行拆分并交错执行,只留下无效的指令(或其效果不明显,即将值赋值给变量,而不使用它作为符号一个新的)。如果您设置了一个值,编译器将假定该值保持到下一个asignment,并且可能使用该知识来简化表达式,甚至可以推断出某些分支从未被采用。步骤虽然在调试器中使用高(呃)优化级别编译的程序可以很有趣; - )