在32位应用程序中使用uint64_t

时间:2019-04-08 10:10:09

标签: c++ 32bit-64bit

由于某些库,我必须以32位编译我的应用程序,但是我需要使用超过32位类型最大数量的整数变量。因此,例如,如果我尝试使用uint64_t,则会在2147483647处出现溢出。

我认为可以在32位应用程序中使用64位整数变量,所以我在这里错过了什么?我是否必须包括一些特定的标头oder,因此必须设置一些选项?使用VS17。

编辑:

我做了一些测试,在这个示例程序中,我可以重现我的过低问题。

#include <iostream>

int main()
{
    uint64_t i = 0;

    while (true)
    {
        std::printf("%d\n",i);
        i += (uint64_t)10000;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

错误在这里:

std::printf("%d\n",i);
             ^^

您使用了错误的格式说明符,因此该程序的行为是不确定的。 %d用于signed int。您需要使用

std::printf("%" PRIu64 "\n",i);

PRIu64<cinttypes>中声明。

P.S。您还没有包含声明std::printf的标头。