Подтвердить что ты не робот

Printf и% llx в GCC под Windows 64x

Я пытаюсь избавиться от ложного предупреждения в своей программе. В Windows 64 (под Linux не существует такого предупреждения):

printf("%llu",UINT64_MAX);

генерирует следующее предупреждение:

warning: unknown conversion type character 'l' in format [-Wformat]|

Выход кажется правильным, и предупреждения не должно быть. Наиболее актуальная запись, связанная с gcc, которую я могу найти, - это отчет об ошибке от 2008 года http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37768

Если я правильно понимаю, это предупреждение проистекает из того факта, что под капотом gcc вызывает MSVC printf, который не совместим с C99 и не может понять формат unsigned long long в printf. На той же странице предлагается использовать то, что называется gnu_printf. Я пытался Google, но я не нашел заголовок для включения.

Итак, вопрос в том, как это следует обрабатывать, чтобы быть переносимым? Я просто хочу избавиться от предупреждения правильным и небрежным способом.

EDIT: Для тех, кто смотрит на вопрос в будущем, благодаря ссылке, предоставленной поставщиком, переносимым ответом будет использование файла заголовка inttypes.h.

Подробнее об этом: en.wikipedia.org/wiki/C_data_types
И правильный способ вызова printf будет:

printf("%"PRIu64"",UINT64_MAX);
4b9b3361

Ответ 1

Как я уже догадываюсь, вы уже знаете, от http://comments.gmane.org/gmane.comp.gnu.mingw.w64.general/4670 (обратите внимание: мертвая ссылка, см. копию интернет-архива),

проблема заключается в том, что спецификатор ширины форматирования %ll не поддерживается для все версии msvcrt-DLL, поэтому gcc предупреждает о ее использовании. вариант для указания 64-битной целочисленной-скалярной ширины в форматировании для msvcrt в обратном совместимости - это использовать %I64.