在我的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位硬件)。谢谢!
答案 0 :(得分:9)
uint32_t
只是unsigned int
。因此,使用fprintf(stream, "%4u", ...)
(unsigned int)或更好,fprintf(stream, "%4" PRIu32, ...)
(inttypes.h
的{{1}} printf-string说明符。)
后者肯定会消除编译器警告/错误,此外还是跨平台的。
答案 1 :(得分:4)
可靠地抑制警告的最简单方法是使用强制转换:
printf( "%lu", ( unsigned long )x );
答案 2 :(得分:1)
“long int”和“int”是C ++中的不同类型。您可能正在寻找“u”格式,它代表“unsigned int”。当然,这取决于什么“uint32_t”是编译器的typedef。