今日,发现在Release的调试模式下,VS2010会“莫名其妙”的跳过一些代码不执行.
经实验,初步判断可能的原因:预处理器指令或编译器/连接器优化。
20150703更新:
部分代码:
m_pTameAtomicClock = new TAC::CTameAtomicClock; CString TameAtomicClockPath = GetCurDir() + "\TAC"; int ErrorCode = m_pTameAtomicClock->InitDocile(Port, TameAtomicClockPath); if (!(0 == ErrorCode))//if内条件不执行 { return ErrorCode;//直接执行这一步 }
经实验判断,或许是因为名字空间的问题(不确定),编译器把关于变量ErrorCode直接相关的代码都优化掉了。
在ErrorCode前加volatile 关键字就好了(难道编译器认为这个变量不会被本程序改变?)。
具体本质原因,还需要资料支撑,正在寻找中。
——ZXF_2015-07-02 10:59:04