当我运行程序的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;
}
答案 0 :(得分:3)
您的VS 2012正在编译32位整数,而g ++正在编译64位整数。使用__int64或long long,或编译器需要强制执行64位整数的任何类型。
答案 1 :(得分:1)
G ++使用64位long
,而Visual C ++使用32位long
。如果要在这两个编译器上使用64位整数,请使用long long
。如果你想确定它是64位,最好使用int64_t
。
答案 2 :(得分:-2)
如果您的跨平台代码依赖于类型的大小,例如读取二进制文件格式或网络消息,则可以使用static_assert来帮助您。例如,
static_assert(sizeof(sum1)==8 && CHAR_BIT == 8, "64-bit");