这是有问题的代码:
void DeckTug::StickCallback(unsigned long long evtID, DWORD value)
{
long int val = value;
if (evtID == stickXInputID || evtID == stickAxisXInputID)
stickXpct = (((double)val)) / 325.94;
else if (evtID == stickYInputID || evtID == stickAxisYInputID) {
stickYpct = (((double)val)) / 325.94;
if(isAuto)
if ((stickYpct < 0.0)) {
acPullingTug = true;
tugTBoffset = tugReversed ? towbarAttachAft * (-1.0) : towbarAttachForward;
}
else {
acPullingTug = false;
tugTBoffset = tugReversed ? towbarAttachAft * (-1.0) : towbarAttachForward;
}
}
}
当我编译调试版本时,它运行完美。当我编译发行版时,它不起作用。当我将Visual Studio调试器附加到发行版时,我可以在第一个if语句和函数的右括号处中断,但是我无法在其他任何地方遇到断点,而且stickXpct或stickYpct都没有被分配任何东西,尽管在调试器中我可以看到“值”具有有效值,并且“ evtID”确实等于输入ID之一。 总之,在我看来,仅在代码的发行版中,即使其中一个应评估为true,第一个“ if”陈述式和第一个“ else if”陈述式也仅评估为false。有人知道这是怎么回事吗?因为我没有。
非常感谢, 法利
答案 0 :(得分:0)
编辑:更改答案以回应评论
尝试增加波动率
void DeckTug::StickCallback(unsigned long long evtID, DWORD value)
{
long int val = value;
volatile unsigned long long _evtID = evtID;
if (_evtID == stickXInputID || _evtID == stickAxisXInputID)
stickXpct = (((double)val)) / 325.94;
else if (_evtID == stickYInputID || _evtID == stickAxisYInputID) {
stickYpct = (((double)val)) / 325.94;
if(isAuto)
if ((stickYpct < 0.0)) {
acPullingTug = true;
tugTBoffset = tugReversed ? towbarAttachAft * (-1.0) : towbarAttachForward;
}
else {
acPullingTug = false;
tugTBoffset = tugReversed ? towbarAttachAft * (-1.0) : towbarAttachForward;
}
}
}
这应该阻止编译器优化那些分支,直到您找到为什么想要优化那些分支为止。