2

当我运行我的程序的 g++ 编译版本时,会返回正确的总和 18510000000。当我运行 VS 2012 编译程序时,返回 1330130816。谁能解释为什么会这样以及如何修复代码以与两个编译器一起使用?

#include <iostream>

using namespace std;

int main()
{
    long sum = 0;
    for(int i = 0; i < 15000000; i++) {
        sum = sum + 1234;
    }
    cout << "sum = " << sum << endl;
    return 0;
}
4

3 回答 3

2

您的 VS 2012 正在编译 32 位整数,而 g++ 正在编译 64 位整数。使用 __int64 或 long long,或者您的编译器需要强制执行 64 位整数的任何类型。

于 2013-09-09T04:12:33.903 回答
1

G++ 使用 64-bit long,而 Visual C++ 使用 32-bit longlong long如果您想在这两个编译器上使用 64 位整数,请使用。int64_t如果您想确保它是 64 位的,使用它可能会更好。

于 2013-09-09T04:12:27.040 回答
-2

如果您的跨平台代码依赖于您的类型的大小,例如用于读取二进制文件格式或网络消息,您可以使用 static_assert 来帮助您。例如,

static_assert(sizeof(sum1)==8 && CHAR_BIT == 8, "64-bit");
于 2013-09-09T04:59:07.190 回答