サイズ指定
書式指定において、4 番目のフィールドは変換指定子の引数の長さの修飾子です。 修飾する変換指定子に応じて、size フィールドの type フィールド プレフィクス (h、l、w、I、I32、I64、および ll) では、対応する引数の "サイズ" (long、short、32 ビット、64 ビット、1 バイト、またはワイド文字) を指定します。 次の表に示すように、type 系関数または printf 系関数では、これらのサイズ プレフィックスを wprintf 文字と共に使用して、引数の長さの解釈を指定できます。 一部の引数の型においては、size フィールドは省略可能です。 サイズ プレフィックスを指定しない場合: フォーマッタは整数の引数 (たとえば、符号付きまたは符号なしの char、short、int、long、および列挙型) を 32 ビットの int 型として使用します。また、浮動小数点引数は 64 ビット double 型として使用されます。 これは、可変引数リストの既定の引数の昇格規則と一致します。 引数の昇格の詳細については、「省略記号と既定の引数」を参照してください。 32 ビット システムと 64 ビット システムの両方で、64 ビット整数の引数の書式設定には ll または I64 のサイズ プレフィックスが含まれる必要があります。 それ以外の場合はフォーマッタの動作は未定義になります。
32 ビットおよび 64 ビットのコードでは、一部の型のサイズは異なります。 たとえば、 size_t は x86 用にコンパイルされたコードでは 32 ビットですが、 x64 用にコンパイルされたコードでは 64 ビットになります。 可変幅の型がプラットフォームに依存しない書式設定コードを作成するには、可変幅引数の長さの修飾子を使用します。 または、64 ビットの引数の長さの修飾子を使用して、可変幅引数の型を明示的に 64 ビットに昇格させます。 Microsoft 固有の I 引数の長さの修飾子は、可変幅の整数の引数を処理します。
注意
I、I32、および I64 の長さの修飾子のプレフィックスは Microsoft 拡張機能であり、ANSI 互換姓がありません。h プレフィックス (char 型のデータと共に使用する場合)、w プレフィックス (wchar_t 型のデータと共に使用する場合)、および l プレフィックス (double 型のデータと共に使用する場合) は Microsoft 拡張機能です。hh、j、z、および t の長さのプレフィックスはサポートされていません。
printf および wprintf の書式型指定子のサイズ プレフィックス
指定する型 |
プリフィックス |
型指定子 |
---|---|---|
long int |
l (小文字の L) |
d、i、o、x、または X |
long unsigned int |
l |
o、u、x、または X |
long long |
ll |
d、i、o、x、または X |
short int |
h |
d、i、o、x、または X |
short unsigned int |
h |
o、u、x、または X |
__int32 |
I32 |
d、i、o、x、または X |
unsigned __int32 |
I32 |
o、u、x、または X |
__int64 |
I64 |
d、i、o、x、または X |
unsigned __int64 |
I64 |
o、u、x、または X |
ptrdiff_t (つまり、32 ビット プラットフォーム上では __int32、64 ビット プラットフォーム上では __int64) |
I |
d、i、o、x、または X |
size_t (つまり、32 ビット プラットフォーム上では unsigned __int32、64 ビット プラットフォーム上では unsigned __int64) |
I |
o、u、x、または X |
long double (Visual C++ では、long double は別個の型ですが、これには double と同じ内部表現があります)。 |
l または L |
a、A、e、E、f、g、または G |
1 バイト文字と printf 関数および wprintf 関数 (hc または hC の型指定子は、c 関数の printf および C 関数の wprintf と同じ意味です)。 |
h |
c または C |
ワイド文字と printf 関数および wprintf 関数 (lc、lC、wc、または wC の型指定子は、C 関数の printf および c 関数の wprintf と同じ意味です)。 |
l または w |
c または C |
1 バイト文字の文字列と printf 関数および wprintf 関数 (hs または hS の型指定子は、s 関数の printf および S 関数の wprintf と同じ意味です)。 |
h |
s、S、または Z |
ワイド文字の文字列と printf 関数および wprintf 関数 (ls、lS、ws、または wS の型指定子は、S 関数の printf および s 関数の wprintf と同じ意味です)。 |
l または w |
s、S、または Z |