printf 是否需要 %zu 说明符?

Is the %zu specifier required for printf?

我们在嵌入式平台上使用 C89。我试图打印出 size_t,但没有成功:

#include <stdio.h>
int main(void) {
    size_t n = 123;
    printf("%zu\n",n);
    return 0;
}

而不是 123,我得到了 zu
其他说明符工作正常。

如果 size_t 存在,zu 不应该在 printf 中可用吗?
这是我应该联系我的图书馆供应商的事情,还是允许图书馆实施排除它?

If size_t exists shouldn't zu also be available in printf?

size_t 至少自 C89 以来就存在,但相应的格式说明符 %zu(特别是长度修饰符 z)仅在 C99 之后才添加到标准中。

因此,如果您不能使用 C99(或 C11)并且不得不在 C89 中打印 size_t,您只需要回退到其他现有类型,例如:

printf("%lu\n", (unsigned long)n);

这工作正常。在我的系统中,它正在打印预期值。 由于编译器,您可能会收到错误。我正在使用 GCC 编译器。如果您只有这个并尝试获取输出,请先更新 GCC,然后再尝试。它会起作用。

size_t 由 sizeof() 编辑 return。 %zu 说明符打印 length.So 到 return n 的大小,代码应为:#include

int main(void) { size_t n=123; printf("%zu\n",sizeof(n)); return 0;`}