寻求有关在 printf()
中使用 "zd"
的澄清。
当然,对于 C99 及更高版本,以下用法是正确的。
void print_size(size_t sz) {
printf("%zu\n", sz);
}
根据 C 规范,似乎允许使用 printf("%zd\n", sz)
,具体取决于如何解读:
7.21.6.1 函数 fprintf
z
指定后面的d
、i
、o
、u
、x
或X
转换说明符适用于size_t
或相应的带符号整数类型参数;或者指定后面的n
转换说明符适用于指向带符号整数类型(与size_t
相应)的指针参数。C11dr §7.21.6.1 7
这应该被解读为:
- "
z
指定后面的d
... 转换说明符适用于size_t
或相应的带符号整数类型参数 ... " (两个类型),以及 "z
指定后面的u
... 转换说明符适用于size_t
或相应的带符号整数类型参数 ... " (两个类型)
还是
- "
z
指定后面的d
... 转换说明符适用于相应的带符号整数类型参数 ... " (仅限带符号类型),以及 "z
指定后面的u
... 转换说明符适用于size_t
"(仅限无符号类型)。
我一直使用 #2 的定义,但现在不太确定了。
哪个是正确的,1、2 还是其他什么?
如果 #2 是正确的,请举一个可以使用
"%zd"
的类型的例子。