【发布时间】:2011-02-10 18:28:57
【问题描述】:
在我的 C 代码中,我是 fprintfing "%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'
uint32_t 和 long unsigned int 在 32 位架构上不是同一个东西吗?如果不消除 -Wall 编译器开关或使用类型转换(如果可以,如何),是否可以避免此警告?
是的,我仍在使用 32 位计算机/arch/OS/编译器(目前太差,无法负担新的 64 位硬件)。谢谢!
【问题讨论】:
-
真正的问题:“我如何让 gcc 在 long == int 的机器上对 {%d with long} 发出警告,因为出于某种原因(可能是 MS compat) int32_t 在机器上被定义为 long 而不是 int,人们坚持在任何地方都使用 int32_t,我真的不想把 (int) 放在传递给 printf 的每一件事之前。