在调试和发布之间以不同顺序执行的代码

时间:2017-02-07 16:49:07

标签: c++ debugging

我的环境是vs2013-update-5,我发现我的代码在调试和发布之间有不同的结果,例如:

#include <iostream>
#include <string>
using namespace std;

int increase(int* x) {
    int previous = *x;
    *x += 1;
    return previous;
}
int main() {
    int data = 1;
    int p = 2;

    cout << ((p-data) + increase(&p)) << endl;
}

调试模式下打印 3 ,在发布模式下打印 4 。我知道那里的解决方法如下:

    int x = p-data;
    int y = increase(&p);
    cout << (x + y) << endl;

使用一些临时变量来确保结果。但在我的实际情况中,代码用于解析一些缓冲区到struct,有很多长度检查,如:

if((p-data) + 4 + forward<int>(&p) != data_len) return false; 
// forward<unsigned>() increases p with sizeof(int), and return origin p
// just like the previous example 

所以最好用一行代码编写,而不是使用临时变量。

为什么会这样?任何编译标志都会导致此问如何确保代码按顺序执行?

0 个答案:

没有答案