[英]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_t
和long unsigned int
不是同一个东西吗? 在不删除-Wall
编译器开关或使用类型转换(如果是,如何)的情况下,是否可以避免此警告?
是的,我仍在使用32位计算机/ arch / OS /编译器(目前太差,无法提供新的64位硬件)。 谢谢!
x86上的uint32_t
使用GCC的Linux只是unsigned int
。 所以使用fprintf(stream, "%4u", ...)
(unsigned int)或者更好的是, fprintf(stream, "%4" PRIu32, ...)
( uint32_t
的inttypes.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.