長度修飾符
C99 和 C11 標準為 printf()
指定了以下長度修飾符; 它們的含義是:
修改符 | 修改 | 適用於 |
---|---|---|
hh |
d,i,o,u,x 或 X. | char ,signed char 或 unsigned char |
h |
d,i,o,u,x 或 X. | short int 或 unsigned short int |
l |
d,i,o,u,x 或 X. | long int 或 unsigned long int |
l |
a,A,e,E,f,F,g 或 G. | double (與 scanf() 相容;在 C90 中未定義) |
ll |
d,i,o,u,x 或 X. | long long int 或 unsigned long long int |
j |
d,i,o,u,x 或 X. | intmax_t 或 uintmax_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 指定了一些不同的長度修飾符,並且明確不支援 hh
,j
,z
或 t
。
修改符 | 修改 | 適用於 |
---|---|---|
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 ) |
l 或 L |
a,A,e,E,f,g 或 G. | long double (在 Visual C++中,雖然 long double 是一個獨特的型別,但它與 double 具有相同的內部表示。) |
l 或 w |
c 或 C. | 具有 printf 和 wprintf 功能的廣泛特性。 (lc ,lC ,wc 或 wC 型別說明符與 printf 函式中的 C 和 wprintf 函式中的 c 同義。) |
l 或 w |
s,S 或 Z. | 帶有 printf 和 wprintf 功能的寬字串。 (ls ,lS ,ws 或 wS 型別說明符與 printf 函式中的 S 和 wprintf 函式中的 s 同義。) |
請注意,C
,S
和 Z
轉換說明符以及 I
,I32
,I64
和 w
長度修飾符是 Microsoft 擴充套件。將 l
作為 long double
而不是 double
的修飾符進行處理與標準不同,儘管除非 long double
與 double
具有不同的表示,否則你將難以發現差異。