printf需要%zu说明符吗?

Tre*_*key 8 c printf size-t c89 c-libraries

我们在嵌入式平台上使用C89.我试图打印出来size_t,但它不起作用:

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

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

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

P.P*_*.P. 11

如果size_t存在不应该在printf中也可用zu?

size_t至少从C89开始存在但是相应的格式说明符%zu(特别是长度修饰符z)仅在C99之后被添加到标准中.

因此,如果您不能使用C99(或C11)并且必须使用size_tC89 进行打印,则只需要回退到其他现有类型,例如:

printf("%lu\n", (unsigned long)n);
Run Code Online (Sandbox Code Playgroud)

  • 在C89中不存在@chqrlie`unigned long long` - 这就是我建议`unsigned long`的原因.如果`unsigned long long`可用(C99),则`size_t`的`%zu`说明符也可用.因此,根本没有必要在这里施放"unsigned long long". (2认同)