繁体   English   中英

关于printf()long unsigned int和uint32_t的编译器警告

[英]Compiler warning about printf() long unsigned int and uint32_t

在我的C代码中,我fprintf了一个"%lu"并给出了相应字段的uint32_t 但是,当我在GCC(版本4.2.4)中使用-Wall编译时,我收到以下警告:

writeresults.c:16: warning: format '%4lu' expects type 'long unsigned int', but argument 2 has type 
`uint32_t'

在32位体系结构上, uint32_tlong unsigned int不是同一个东西吗? 在不删除-Wall编译器开关或使用类型转换(如果是,如何)的情况下,是否可以避免此警告?

是的,我仍在使用32位计算机/ arch / OS /编译器(目前太差,无法提供新的64位硬件)。 谢谢!

x86上的uint32_t使用GCC的Linux只是unsigned int 所以使用fprintf(stream, "%4u", ...) (unsigned int)或者更好的是, fprintf(stream, "%4" PRIu32, ...)uint32_tinttypes.h printf-string说明符)。

后者肯定会消除编译器警告/错误,此外,还是跨平台的。

可靠地抑制警告的最简单方法是使用强制转换:

printf( "%lu", ( unsigned long )x );

“long int”和“int”是C ++中的不同类型。 您可能正在寻找“u”格式,它代表“unsigned int”。 当然,这取决于什么“uint32_t”是编译器的typedef。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM