在 32 位应用程序中使用 uint64_t

Using uint64_t in 32 bit application

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

处溢出

我认为可以在 32 位应用程序中使用 64 位整数变量,那么我在这里错过了什么?我是否必须包含一些特定的 header 或者我是否必须因此设置一些选项?使用 VS17.

编辑:

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

#include <iostream>

int main()
{
    uint64_t i = 0;

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

错误在这里:

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

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

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

PRIu64<cinttypes> 中声明。

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

的 header