长度修饰符

C99 和 C11 标准为 printf() 指定了以下长度修饰符; 它们的含义是:

修改符 修改 适用于
hh d,i,o,u,x 或 X. charsigned charunsigned char
h d,i,o,u,x 或 X. short intunsigned short int
l d,i,o,u,x 或 X. long intunsigned long int
l a,A,e,E,f,F,g 或 G. double(与 scanf() 兼容;在 C90 中未定义)
ll d,i,o,u,x 或 X. long long intunsigned long long int
j d,i,o,u,x 或 X. intmax_tuintmax_t
z d,i,o,u,x 或 X. size_t 或相应的签名类型(POSIX 中的 ssize_t
t d,i,o,u,x 或 X. ptrdiff_t 或相应的无符号整数类型
L a,A,e,E,f,F,g 或 G. long double

如果长度修饰符出现时带有除上述指定之外的任何转换说明符,则行为未定义。

Microsoft 指定了一些不同的长度修饰符,并且明确不支持 hhjzt

修改符 修改 适用于
I32 d,i,o,x 或 X. __int32
I32 o,u,x 或 X. unsigned __int32
I64 d,i,o,x 或 X. __int64
I64 o,u,x 或 X. unsigned __int64
I d,i,o,x 或 X. ptrdiff_t(即 32 位平台上的 __int32,64 位平台上的 __int64
I o,u,x 或 X. size_t(即 32 位平台上的 unsigned __int32,64 位平台上的 unsigned __int64
lL a,A,e,E,f,g 或 G. long double(在 Visual C++中,虽然 long double 是一个独特的类型,但它与 double 具有相同的内部表示。)
lw c 或 C. 具有 printfwprintf 功能的广泛特性。 (lclCwcwC 类型说明符与 printf 函数中的 Cwprintf 函数中的 c 同义。)
lw s,S 或 Z. 带有 printfwprintf 功能的宽字符串。 (lslSwswS 类型说明符与 printf 函数中的 Swprintf 函数中的 s 同义。)

请注意,CSZ 转换说明符以及 II32I64w 长度修饰符是 Microsoft 扩展。将 l 作为 long double 而不是 double 的修饰符进行处理与标准不同,尽管除非 long doubledouble 具有不同的表示,否则你将难以发现差异。