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

时间:2011-02-10 18:28:57

标签: c linux gcc printf

在我的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位硬件)。谢谢!

3 个答案:

答案 0 :(得分:9)

带有GCC的x86 Linux上的

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。