Моя компания медленно переходит с C на C ++ 98.C ++ 98 - это расширенный набор C, так что это не должно быть проблемой, но это так.Печать 64-битных целых чисел фиксированной ширины с использованием printf
не работает, когда используется в сочетании с педантичностью, флагами предупреждений и указанием кода для 32-битной среды.
Числа, которые мне нужно напечатать, имеют тип uint64_t
.И я понимаю использование PRIX64
при использовании printf
.Однако, как только дополнительные флаги добавляются при компиляции, появляются ошибки.
Я посмотрел на заголовки, чтобы увидеть, есть ли что-то странное, но все выглядит хорошо.Я не уверен, почему использование этой комбинации работает в C, но не в C ++.Конечно, правильный способ решить эту проблему - начать использовать std::cout
, но кода для редактирования так много, что невозможно сделать все сразу.
Минимальный пример, показанный ниже (print.cpp):
#include <stdio.h>
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
int main()
{
uint64_t num = 0x0;
printf("num is %" PRIX64"\n", num);
return 0;
}
команда, использованная для его компиляции:
g++ print.cpp -o print --std=c++98 -Wall -m32 --pedantic
Ожидаемый результат: ошибок нет, номер печатается.Результат:
warning: ISO C++ does not support the ‘ll’ gnu_printf length modifier