如何在VS 2012和g ++中获得64位长

时间:2013-09-09 04:08:43

标签: c++ visual-studio-2012 g++

当我运行程序的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;
}

3 个答案:

答案 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");