用于Windows和Linux的C++中64位整数的跨平台定义

Jai*_*tes 8 c++ cross-platform mingw int64 long-integer

我正在尝试用C++ for Windows(MinGW)和Linux(g ++)编写跨平台代码.我习惯在Linux中将64位整数定义为"long",但当我移动到MinGW时,sizeof(long)返回4个字节.然后我发现我可以使用"long long"或"__INT64"在MinGW中定义64位整数.我有两个问题:

1.-为Windows和Linux定义64位整数的最便携方式是什么?我目前正在使用#ifdef,但我不知道这是否是最好的方法:

#ifdef LINUX
    #define INT64 long 
#elif WIN32
    #define INT64 long long
#endif
Run Code Online (Sandbox Code Playgroud)

2.- 我应该在MinGW中使用"long long"还是"__INT64"?为什么?

mfo*_*ini 14

您可以使用int64_t标头中定义的类型cstdint.这是C++ 11的标准.

请注意,如果您使用的平台不支持64位整数,则此类型可能不存在.

至于long long,这是另一种可能性.long longs至少为64位宽.请注意,它也是C++ 11的标准版,即使它在使用C++ 03时可以在多个编译器上运行.

正如Pete Becker所提到的,你可以使用int_least64_t.如果您不介意使用完全64位整数,但这是一个至少 64位宽的整数类型,这是一个不错的选择.

  • 可能更好的选择:`int_least64_t`,它将永远存在. (2认同)