Использование uint64_t в 32-битном приложении - PullRequest
3 голосов
/ 08 апреля 2019

Из-за некоторых библиотек мне приходится компилировать свое приложение в 32-битной версии, но мне нужно использовать целочисленные переменные, которые превышают максимальное количество 32-битных типов.Так, например, если я пытаюсь использовать uint64_t, я получаю переполнение при 2147483647.

Я думал, что можно использовать 64-битные целочисленные переменные в 32-битном приложении, так что я здесь упустил?Нужно ли включать какой-то конкретный заголовок или мне нужно установить какую-то опцию?Используя VS17.

РЕДАКТИРОВАТЬ:

Я провел некоторое тестирование, и в этом примере программы, я могу воспроизвести мою проблему переполнения.

#include <iostream>

int main()
{
    uint64_t i = 0;

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

1 Ответ

3 голосов
/ 08 апреля 2019

Ошибка здесь:

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

Вы использовали неверный спецификатор формата, и, следовательно, поведение программы не определено. %d для signed int. Вам нужно использовать

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

PRIu64 объявлено в <cinttypes>.

P.S. Вы также не включили заголовок, который объявляет std::printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...