長度修飾符

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 具有不同的表示,否則你將難以發現差異。