加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 01:38:33 所属栏目:Windows 来源:网络整理
导读:我想在我的程序中摆脱虚伪的警告.在 Windows 64下(在linux下没有这样的警告)这个语句: printf("%llu",UINT64_MAX); 生成以下警告: warning: unknown conversion type character 'l' in format [-Wformat]| 输出似乎是正确的,警告不应该在那里.最相关的gcc
我想在我的程序中摆脱虚伪的警告.在 Windows 64下(在linux下没有这样的警告)这个语句:
printf("%llu",UINT64_MAX);

生成以下警告:

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

输出似乎是正确的,警告不应该在那里.最相关的gcc相关文章我可以找到这个bug报告从2008 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37768回来

如果我按照这样的理解正确,这个警告源于这样一个事实,即在gcc下,gcc调用不符合C99的MSVC printf,并且无法理解printf中的unsigned long long格式.从同一页面,建议的解决方案是使用名为gnu_printf的东西.我试图google,但我没有找到一个标题包括.

所以问题是为了便于携带,应该如何处理?我只是想以正确和非草率的方式摆脱警告.

编辑:对于那些在将来问题的人来说,由于回答者提供的链接,便携式的答案是使用头文件inttypes.h.

这里有更多的信息:
en.wikipedia.org/wiki/C_data_types
而printf的正确方法是:

printf("%"PRIu64"",UINT64_MAX);
我猜你可能已经知道了,从http://comments.gmane.org/gmane.comp.gnu.mingw.w64.general/4670(注:死链接;见 Internet Archive’s copy),

the issue is that formatter-width specifier %ll isn’t supported for
all msvcrt-DLL versions,therefore gcc warns about its use. The
variant for specifying 64-bit integer-scalar-width in formatter for
msvcrt in a backward-compatible way is by using %I64.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读