Specyfikacja rozmiaru
W specyfikacji formatu czwarte pole jest modyfikatorem długości argumentu dla specyfikatora konwersji.size prefiksy pola do type pola —h, l, w, I, I32, I64, i ll— określ "rozmiar" odpowiedni argument — długi lub krótki, 32-bitowy lub 64-bitowy, znaków jednobajtowych lub znaków dwubajtowych — w zależności od specyfikatora konwersji, który modyfikuje.Te prefiksy rozmiarów są używane ze type znakami printf i wprintf rodzin i funkcji do określenia interpretacji długości argumentu, jak pokazano w poniższej tabeli.size pole jest opcjonalne w przypadku niektórych typów argumentów.Jeśli nie określono żadnego prefiksu rozmiaru, program formatujący wykorzystuje argumenty liczba całkowita — na przykład podpisane lub niepodpisane char, short, int, long, i typów wyliczenia — jako 32-bitowa int typów i argumenty zmiennoprzecinkowe są używane jako 64-bitowa double typów.Domyślne reguły promocji argument list zmiennej argument jest zgodna.Aby uzyskać więcej informacji na temat argumentu promocji zobacz Wielokropki i argumenty domyślne.W przypadku systemów zarówno 32-bitowych i 64-bitowych specyfikacji formatu z argumentem 64-bitowa wartość całkowita musi zawierać prefiksem rozmiar ll lub I64.W przeciwnym razie zachowanie program formatujący jest niezdefiniowana.
Niektóre typy są różne rozmiary w kodzie 32-bitowych i 64-bitowych.Na przykład size_t 32 bitów długo w kodzie skompilowanym dla procesorów x 86 i 64 bity w kodzie skompilowanym dla procesorów x 64.Aby utworzyć niezależne od platformy formatowania kodu dla typów zmiennej szerokości, można użyć modyfikator długość argumentu zmiennej szerokości.Możesz również zastosować modyfikator długość argumentu 64-bitowych i jawnie podwyższyć typ argumentu o zmiennej szerokości do 64 bity.Specyficzne dla firmy Microsoft I argument modyfikator długość obsługi argumentów całkowitą zmiennej szerokości.
[!UWAGA]
I, I32, i I64 długość modyfikatora prefiksów to rozszerzenia Microsoft i nie są zgodne z ANSI.h prefiksu, gdy jest używany z danymi typem char, w prefiksu, gdy jest używany z danymi typami wchar_ti l prefiksu, gdy jest używany z danymi typami double są rozszerzenia Microsoft.hh, j , z, i t długości prefiksów nie są obsługiwane.
Rozmiar prefiksów dla printf i wprintf specyfikatorów typ formatu
Aby określić |
Użyj prefiksu |
Ze specyfikatorem typu |
---|---|---|
long int |
l (mała litera L) |
d, i, o, x lub X |
long unsigned int |
l |
o, u, x lub X |
long long |
ll |
d, i, o, x lub X |
short int |
h |
d, i, o, x lub X |
short unsigned int |
h |
o, u, x lub X |
__int32 |
I32 |
d, i, o, x lub X |
unsigned __int32 |
I32 |
o, u, x lub X |
__int64 |
I64 |
d, i, o, x lub X |
unsigned __int64 |
I64 |
o, u, x lub X |
ptrdiff_t (to znaczy, __int32 na platformach 32-bitowych, __int64 na platformach 64-bitowych) |
I |
d, i, o, x lub X |
size_t (to znaczy, unsigned __int32 na platformach 32-bitowych, unsigned __int64 na platformach 64-bitowych) |
I |
o, u, x lub X |
long double (W Visual C++, chociaż long double jest typ samodzielnym, ma taką samą reprezentację wewnętrzną jak double.) |
l lub L |
a, A, e, E, f, g lub G |
Ciąg znaków jednobajtowych z printf i wprintf funkcji.(Specyfikator typu hc lub hC jest równoznaczny z c w funkcjach printf oraz z C w funkcjach wprintf.) |
h |
c lub C |
Szeroki znak printf i wprintf funkcji.(Specyfikator typu lc, lC, wc lub wC jest równoznaczny z C w funkcjach printf oraz z c w funkcjach wprintf.) |
l lub w |
c lub C |
Ciąg znaków jednobajtowych printf i wprintf funkcji.(Specyfikator typu hs lub hS jest równoznaczny z s w funkcjach printf oraz z S w funkcjach wprintf.) |
h |
s, S lub Z |
Ciąg szerokich znaków z printf i wprintf funkcji.(Specyfikator typu ls, lS, ws lub wS jest równoznaczny z S w funkcjach printf oraz z s w funkcjach wprintf.) |
l lub w |
s, S lub Z |
Zobacz też
Informacje
printf, _printf_l, wprintf, _wprintf_l
Składnia specyfikacji formatu: funkcje printf i wprintf