【发布时间】:2011-03-11 05:50:10
【问题描述】:
我有以下
size_t i = 0;
uint32_t k = 0;
printf("i [ %lu ] k [ %u ]\n", i, k);
编译时收到以下警告:
format ‘%lu’ expects type ‘long unsigned int’, but argument has type ‘uint32_t’
当我使用夹板运行此程序时,我得到以下信息:
Format argument 1 to printf (%u) expects unsigned int gets size_t: k
非常感谢您的建议,
【问题讨论】:
-
C89 不支持来自
<stdint.h>或<inttypes.h>的uint32_t;如果你想使用这些类型,你应该升级到 C89。作为扩展,GCC 可能确实允许您使用它们,但 C89 没有任何此类支持。 -
size_t的官方 C99 格式修饰符是“z”,如"%zu"。 -
我相信@kenny 的答案最适合
uint32_t,但它缺少size_t。 @u0b34a0f6ae 的答案包括两者。 -
Jonathan Leffler 在第一条评论中第二次提到 C89 应该是 C99