Windows 64x下的GCC中的printf和%llx

Lef*_*ris 14 c gcc

我试图摆脱我的程序中的虚假警告.在Windows 64下(在linux下没有这样的警告)这句话:

printf("%llu",UINT64_MAX);
Run Code Online (Sandbox Code Playgroud)

生成以下警告:

warning: unknown conversion type character 'l' in format [-Wformat]|
Run Code Online (Sandbox Code Playgroud)

输出似乎是正确的,警告不应该在那里.我能找到的最相关的gcc相关帖子是2008年的这个错误报告http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37768

如果我根据这一点正确理解,这个警告源于这样一个事实:在引擎盖下gcc调用MSVC printf,它不符合C99并且无法理解printf中的unsigned long long格式.在同一页面上,建议的解决方案是使用名为gnu_printf的东西.我试图谷歌,但我没有找到包含的标题.

所以问题是如何处理以便携带?我只想以正确和非邋way的方式摆脱警告.

pau*_*sm4 8

正如我猜你可能已经知道的那样http://comments.gmane.org/gmane.comp.gnu.mingw.w64.general/4670(注意:死链接;请参阅Internet Archive的副本),

问题是%ll所有msvcrt-DLL版本都不支持formatter-width说明符,因此gcc警告它的用法.用于以向后兼容的方式在msvcrt格式化器中指定64位整型标量宽度的变体是使用%I64.

  • 谢谢.即使使用%I64工作也不是便携式答案,但是这个链接引导我去做!实际上,答案在于<inttypes.h>.它们具有用于在其中调用每个变量的格式的适当方式的宏.所以在我的uint64_t的情况下,我将使用PRIu64. (3认同)