Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在VS 2012和g+中获得64位的长度+;_C++_Visual Studio 2012_G++ - Fatal编程技术网

C++ 如何在VS 2012和g+中获得64位的长度+;

C++ 如何在VS 2012和g+中获得64位的长度+;,c++,visual-studio-2012,g++,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 + 123

当我运行程序的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;
}
#包括
使用名称空间std;
int main()
{
长和=0;
对于(int i=0;i<15000000;i++){
总和=总和+1234;
}

CUT< P> G++使用64位<代码>长< /C>,而Visual C++使用32位<代码>长< /C> >使用<代码>长Lo/<代码>,如果您想在这两个编译器上使用64位整数,如果您想确保它是64位,则最好使用<代码>“Int6xt < /C>”。< V/P> < P>您的VS 2012正在编译一个32位整数,而G++正在编译一个64位的整数。ger。使用_uint64或long long,或编译器需要的任何类型来强制执行64位整数。

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

static_assert(sizeof(sum1)==8 && CHAR_BIT == 8, "64-bit");

我无法让int64\t工作,但感谢您的长期支持。@Johnny:您需要包括
(或
)使用
int64\u t
和相关整数类型的头。
int64\u t
不是答案;它不存在于没有64位宽的有符号整数类型的平台上。
int至少64\u t
可能是,也可能是
int\u fast64\u t
。另一方面,
long
将始终至少是64位宽,因此是完全可移植的。
long
始终至少为64位宽。