Składnia specyfikacji formatu: printf i wprintf funkcje

Różne printf funkcje i wprintf przyjmują ciąg formatu i opcjonalne argumenty i tworzą sformatowaną sekwencję znaków dla danych wyjściowych. Ciąg formatu zawiera zero lub więcej dyrektyw, które są znakami literału dla specyfikacji konwersji danych wyjściowych lub zakodowanych, które opisują sposób formatowania argumentu w danych wyjściowych. W tym artykule opisano składnię używaną do kodowania specyfikacji konwersji w ciągu formatu. Aby uzyskać listę tych funkcji, zobacz Stream We/Wy.

Specyfikacja konwersji składa się z opcjonalnych i wymaganych pól w tym formularzu:

%[flagi][width][.precision][size]type

Każde pole specyfikacji konwersji jest znakiem lub liczbą, która oznacza konkretną opcję formatu lub specyfikator konwersji. Pole wymaganego typu określa rodzaj konwersji, który ma zostać zastosowany do argumentu. Opcjonalne flagi, szerokość i precyzja pól kontrolują inne aspekty formatu, takie jak spacje wiodące lub zera, uzasadnienie i wyświetlana precyzja. Pole rozmiaru określa rozmiar używanego i konwertowanego argumentu.

Podstawowa specyfikacja konwersji zawiera tylko znak procentu i znak typu . Na przykład %s określa konwersję ciągu. Aby znak procentu był wyświetlany, należy użyć składni %%. Jeśli znak procentu jest obserwowany przez znak, który nie ma znaczenia jako pole formatu, wywoływana jest nieprawidłowa procedura obsługi parametrów. Aby uzyskać więcej informacji, zobacz Walidacja parametrów.

Ważne

Aby zapewnić bezpieczeństwo i stabilność, upewnij się, że ciągi specyfikacji konwersji formatu nie są zdefiniowane przez użytkownika końcowego. Rozważmy na przykład program, który monituje użytkownika o wprowadzenie nazwy, a dane wejściowe przechowuje w zmiennej o nazwie user_name będącej ciągiem tekstowym. Aby wydrukować user_namepolecenie , nigdy nie wykonaj następującej czynności:

printf( user_name ); /* Danger! If user_name contains "%s", program will crash */

Zamiast tego należy zrobić tak:

printf( "%s", user_name );

Uwaga

W programie Visual Studio 2015 printf rodzina funkcji i scanf została zadeklarowana jako inline i przeniesiona do <stdio.h> nagłówków i <conio.h> . W przypadku migrowania starszego kodu może zostać wyświetlony LNK2019 w połączeniu z tymi funkcjami. Aby uzyskać więcej informacji, zobacz Historia zmian języka Visual C++ 2003 – 2015.

Specyfikator konwersji typów

Znak specyfikatora konwersji typu określa, czy interpretować odpowiedni argument jako znak, ciąg, wskaźnik, liczbę całkowitą lub liczbę zmiennoprzecinkową. Znak typu jest jedynym polem specyfikacji wymaganej konwersji i pojawia się po dowolnych polach opcjonalnych.

Argumenty zgodne z ciągiem formatu są interpretowane zgodnie z odpowiednim znakiem typu i opcjonalnym prefiksem rozmiaru. Konwersje typów znaków char i wchar_t są określone przy użyciu lub cC, a jednobajtowe i wielobajtowe lub szerokie ciągi znaków są określane za pomocą lub sS, w zależności od funkcji formatowania. Argumenty znaków i ciągów, które są określone przy użyciu i cs są interpretowane jako char i char* przez printf funkcje rodziny, lub jako wchar_t i wchar_t* przez wprintf funkcje rodziny. Argumenty znaków i ciągów, które są określone przy użyciu i CS są interpretowane jako wchar_t i wchar_t* przez printf funkcje rodziny, lub jako char i char* przez wprintf funkcje rodziny. To zachowanie jest specyficzne dla firmy Microsoft. Ze względów wprintf historycznych funkcje używają c znaków i s odwołują się do wchar_t nich oraz CS określają wąskie znaki.

Typy liczb całkowitych, takie jak short, , longint, long longi ich unsigned warianty, są określane przy użyciu dwartości , , i, ou, , xi X. Typy zmiennoprzecinkowe, takie jak , i , są określane przy użyciu metod a, , FeEAf, g, i .Glong doubledoublefloat Domyślnie, chyba że są one modyfikowane przez prefiks rozmiaru , argumenty liczb całkowitych są coerced do int typu, a argumenty zmiennoprzecinkowe są coerced do double. W systemach int 64-bitowych wartość jest wartością 32-bitową, więc 64-bitowe liczby całkowite zostaną obcięte, gdy zostaną sformatowane dla danych wyjściowych, chyba że zostanie użyty prefiks rozmiarull lub I64 . Typy wskaźników określone za pomocą p domyślnego rozmiaru wskaźnika dla platformy.

Uwaga

Specyficzne dla firmy Microsoft:
Znak Z typu i zachowanie cznaków , C, si S typu, gdy są używane z printf funkcjami i wprintf , są rozszerzeniami firmy Microsoft. Standard ISO C używa c i s spójnie dla wąskich znaków i ciągów oraz CS dla szerokich znaków i ciągów we wszystkich funkcjach formatowania.

Wpisz znaki pola

Znak typu Argument Format wyjściowy
c Znak W przypadku użycia z funkcjami printf określa znak jednobajtowy; w przypadku użycia z funkcjami wprintf określa szeroki znak.
C Znak W przypadku użycia z funkcjami printf określa szeroki znak; w przypadku użycia z funkcjami wprintf określa znak jednobajtowy.
d Integer Liczba całkowita ze znakiem dziesiętna.
i Integer Liczba całkowita ze znakiem dziesiętna.
o Integer Niepodpisane ósemkowe liczby całkowite.
u Integer Liczba całkowita bez znaku dziesiętnego.
x Integer Liczba całkowita bez znaku szesnastkowego; używa ciągu "abcdef".
X Integer Liczba całkowita bez znaku szesnastkowego; używa ciągu "ABCDEF".
e Zmiennoprzecinkowych Wartość podpisana, która ma postać [-]dd[]dde[+-|d], gdzie d jest jedną cyfrą dziesiętną, dddd jest co najmniej jedną cyfrą dziesiętną w zależności od określonej precyzji lub sześciu domyślnie, a dd[d] jest dwie lub trzy cyfry dziesiętne w zależności od formatu i rozmiaru wykładnika.
E Zmiennoprzecinkowych Identyczny z formatem z e tą różnicą, że E zamiast e wprowadzać wykładnik.
f Zmiennoprzecinkowych Wartość podpisana, która ma postać [-]dd. d, gdzie dddd jest co najmniej jedną cyfrą dziesiętną. Liczba cyfr przed punktem dziesiętnym zależy od wielkości liczby, a liczba cyfr po przecinku dziesiętnym zależy od żądanej precyzji lub sześciu domyślnie.
F Zmiennoprzecinkowych Identyczny z formatem f , z wyjątkiem tego, że nieskończoność i dane wyjściowe NaN są wielkich liter.
g Zmiennoprzecinkowych Wartości podpisane są wyświetlane w f formacie lub e w zależności od tego, która wartość jest bardziej kompaktowa dla danej wartości i precyzji. Format e jest używany tylko wtedy, gdy wykładnik wartości jest mniejszy niż -4 lub większy niż lub równy argumentowi precyzji . Końcowe zera są obcinane, a punkt dziesiętny pojawia się tylko wtedy, gdy następuje po niej co najmniej jedna cyfra.
G Zmiennoprzecinkowych Identyczne z formatem g , z tą różnicą, że E, a nie e, wprowadza wykładnik (w stosownych przypadkach).
a Zmiennoprzecinkowych Podpisana wartość zmiennoprzecinkowa o podwójnej precyzji, która ma postać [-]0xh.hhhhp[-+|]dd, gdzie h.hhhhh są cyframi szesnastkowymi (przy użyciu małych liter) mantissa i dd są co najmniej jedną cyfrą wykładnika. Precyzja określa liczbę cyfr po punkcie.
A Zmiennoprzecinkowych Podpisana szesnastkowa wartość zmiennoprzecinkowa o podwójnej precyzji, która ma postać [-]0Xh.hhhhP[-+|]dd, gdzie h.hhhhh są cyframi szesnastkowymi (przy użyciu wielkiej litery) mantissa i dd są co najmniej jedną cyfrą wykładnika. Precyzja określa liczbę cyfr po punkcie.
n Wskaźnik do liczby całkowitej Liczba znaków, które zostały pomyślnie zapisane do tej pory do strumienia lub buforu. Ta wartość jest przechowywana w liczbą całkowitą, której adres jest podany jako argument. Rozmiar liczby całkowitej wskazywany na może być kontrolowany przez prefiks specyfikacji rozmiaru argumentu. Specyfikator n jest domyślnie wyłączony. Aby uzyskać informacje, zobacz ważną notatkę zabezpieczeń.
p Typ wskaźnika Wyświetl argument jako adres w cyfrach szesnastkowej.
s Ciąg W przypadku użycia z funkcjami printf określa ciąg znaków jednobajtowych lub wielobajtowych; w przypadku użycia z funkcjami wprintf określa ciąg znaków wielobajtowych. Znaki są wyświetlane do pierwszego znaku o wartości null lub do momentu osiągnięcia wartości precyzji .
S Ciąg W przypadku użycia z funkcjami printf określa ciąg wieloznaczny; w przypadku użycia z funkcjami wprintf określa ciąg znaków jednobajtowy lub wielobajtowy. Znaki są wyświetlane do pierwszego znaku o wartości null lub do momentu osiągnięcia wartości precyzji .
Z ANSI_STRING lub UNICODE_STRING struktura VS 2013 i starsze wersje
Gdy adres ANSI_STRING struktury lub UNICODE_STRING jest przekazywany jako argument, wyświetl ciąg zawarty w buforze wskazywanym przez Buffer pole struktury. Użyj prefiksu modyfikatora rozmiaru , w aby określić UNICODE_STRING argument — na przykład %wZ. Length Pole struktury musi być ustawione na długość ciągu w bajtach. MaximumLength Pole struktury musi być ustawione na długość (w bajtach) buforu.

Środowisko uruchomieniowe uniwersalnego języka C (UCRT)
Istnieje znany problem w narzędziu UCRT, który jest obecnie obsługiwany pod kątem zgodności. S Podobnie jak specyfikator, Z specyfikator bez prefiksu modyfikatora rozmiaru odnosi się do UNICODE_STRING funkcji przy użyciu wąskiej funkcji drukowania (na przykład ) i ANSI_STRING podczas korzystania z funkcji drukowania szerokiego (na przykład printfwprintf).
ZZamiast , użyj polecenia hZ , aby określić element ANSI_STRING. wZ(lub lZ) nadal może służyć do określenia .UNICODE_STRING

Z Zazwyczaj znak typu jest używany tylko w funkcjach debugowania sterowników korzystających ze specyfikacji konwersji, takich jak dbgPrint i kdPrint.

W programie Visual Studio 2015 i nowszych wersjach, jeśli argument odpowiadający specyfikatorowi konwersji zmiennoprzecinkowej (a, A, EeFf, gG) jest nieskończony, nieokreślony lub NaN, sformatowane dane wyjściowe są zgodne ze standardem C99. W tej tabeli wymieniono sformatowane dane wyjściowe:

Wartość Dane wyjściowe
Infinity inf
Cicha nazwa sieciowa nan
Sygnalizowanie sieci nan(snan)
Nieokreślona nazwa sieciowa nan(ind)

Każdy z tych ciągów może być poprzedzony znakiem. Jeśli specyfikator konwersji typu zmiennoprzecinkowego jest literą wielkich liter, dane wyjściowe są również formatowane w wielkie litery. Jeśli na przykład specyfikator formatu to %F zamiast %f, nieskończoność jest formatowana jako INF zamiast inf. Funkcje scanf mogą również analizować te ciągi, dzięki czemu te wartości mogą wykonywać zaokrąglone podróże printf i scanf funkcje.

Przed programem Visual Studio 2015 CRT używał innego, niestandardowego formatu dla danych wyjściowych wartości nieskończonych, nieokreślonych i NaN:

Wartość Dane wyjściowe
+ Nieskończoność 1.#INFcyfry losowe
-Nieskończoności -1.#INFcyfry losowe
Nieokreślony (taki sam jak cichy NaN) cyfry.#INDlosowe
NaN cyfry.#NANlosowe

Każdy z tych ciągów mógł być poprzedzony znakiem i mógł być sformatowany inaczej w zależności od szerokości i precyzji pola, czasami z nietypowymi efektami. Na przykład wydruki1.#J, printf("%.2f\n", INFINITY) ponieważ #INF będą "zaokrąglane" do dwóch cyfr precyzji.

Uwaga

Jeśli argument odpowiadający argumentowi %s lub %S, lub Buffer pole argumentu, które odpowiada %Z, jest wskaźnikiem o wartości null, zostanie wyświetlony "(null)".

Uwaga

We wszystkich formatach wykładniczych minimalna liczba cyfr wykładnika do wyświetlenia wynosi dwa, używając trzech tylko w razie potrzeby. Za pomocą _set_output_format funkcji można ustawić liczbę cyfr wyświetlanych na trzy w celu zapewnienia zgodności z poprzednimi wersjami kodu napisanego dla programu Visual Studio 2013 i poprzednich.

Ważne

%n Ponieważ format jest z natury niezabezpieczony, jest domyślnie wyłączony. Jeśli %n występuje w ciągu formatu, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Aby włączyć %n obsługę, zobacz _set_printf_count_output.

Dyrektywy flagi

Pierwsze opcjonalne pole w specyfikacji konwersji zawiera dyrektywy flagi. To pole zawiera zero lub więcej znaków flagi, które określają uzasadnienie wyjściowe i kontrolki wyjściowe znaki, puste, zera wiodące, punkty dziesiętne i ósemkowe i szesnastkowe prefiksy. W specyfikacji konwersji może pojawić się więcej niż jedna dyrektywa flagi, a znaki flagi mogą być wyświetlane w dowolnej kolejności.

Znaki flagi

Flaga Znaczenie Domyślna
- Wyrównaj wynik do lewej w obrębie danej szerokości pola. Wyrównaj do prawej.
+ Użyj znaku (+ lub -), aby prefiksować wartość wyjściową, jeśli jest to typ podpisany. Znak jest wyświetlany tylko dla ujemnych wartości podpisanych (-).
0 Jeśli szerokość jest poprzedzona prefiksem 0, zera wiodące są dodawane do momentu osiągnięcia minimalnej szerokości. Jeśli oba 0 elementy i - są wyświetlane, element 0 jest ignorowany. Jeśli 0 określono format liczby całkowitej (i, u, , xX, o, d), a specyfikacja precyzji jest również obecna — na przykład %04.d0 element jest ignorowany. Jeśli 0 jest określony dla a formatu zmiennoprzecinkowego lub A , zera wiodące są poprzedzone mantissa, po prefiksie 0x lub 0X . Brak wypełniania.
puste (' ') Użyj wartości pustej, aby prefiksować wartość wyjściową, jeśli jest podpisana i dodatnia. Wartość pusta jest ignorowana, jeśli są wyświetlane zarówno puste, jak i + flagi. Nie jest wyświetlana pusta.
# Gdy jest używany z formatem o, xlub X , # flaga używa 0odpowiednio , 0xlub 0X, do prefiksu dowolnej wartości wyjściowej niezerowej. Nie jest wyświetlany prefiks.
W przypadku użycia z formatem e# , , E, fF, alub A flaga wymusza, aby wartość wyjściowa zawierała punkt dziesiętny. Punkt dziesiętny jest wyświetlany tylko wtedy, gdy następuje po nim cyfry.
Gdy jest używany z formatem g lub G , # flaga wymusza, aby wartość wyjściowa zawierała punkt dziesiętny i uniemożliwia obcinanie zer końcowych.

Ignorowane w przypadku użycia z c, d, i, , ulub s.
Punkt dziesiętny jest wyświetlany tylko wtedy, gdy następuje po nim cyfry. Końcowe zera są obcinane.

Specyfikacja szerokości

W specyfikacji konwersji opcjonalne pole specyfikacji szerokości jest wyświetlane po wszelkich znakach flag. Argument width jest nieujemną liczbą całkowitą dziesiętną, która kontroluje minimalną liczbę znaków wyjściowych. Jeśli liczba znaków w wartości wyjściowej jest mniejsza niż określona szerokość, wartości puste są dodawane do lewej lub z prawej strony wartości — w zależności od tego, czy jest określona flaga wyrównania po lewej stronie (-), dopóki minimalna szerokość nie zostanie osiągnięta. Jeśli width wartość jest poprzedzona wartością 0, zera wiodące są dodawane do konwersji liczb całkowitych lub zmiennoprzecinkowych do momentu osiągnięcia minimalnej szerokości, z wyjątkiem sytuacji, gdy konwersja jest nieskończona lub NaN.

Specyfikacja szerokości nigdy nie powoduje obcięć wartości. Jeśli liczba znaków w wartości wyjściowej jest większa niż określona szerokość lub jeśli width nie jest podana, wszystkie znaki wartości są danymi wyjściowymi, z zastrzeżeniem specyfikacji precyzji.

Jeśli specyfikacja szerokości jest gwiazdką (*), int argument z listy argumentów dostarcza wartość. width Argument musi poprzedzać wartość sformatowaną na liście argumentów, jak pokazano w tym przykładzie:

printf("%0*d", 5, 3); /* 00003 is output */

Brak lub mała width wartość w specyfikacji konwersji nie powoduje obcięcia wartości wyjściowej. Jeśli wynik konwersji jest szerszy niż width wartość, pole rozszerza się, aby zawierać wynik konwersji.

Specyfikacja precyzji

W specyfikacji konwersji trzecie pole opcjonalne jest specyfikacją precyzji. Składa się z kropki (.), po której następuje liczba całkowita nieujemna dziesiętna, która w zależności od typu konwersji określa liczbę znaków ciągu, liczbę miejsc dziesiętnych lub liczbę cyfr znaczących do wyprowadzenia.

W przeciwieństwie do specyfikacji szerokości specyfikacja dokładności może powodować obcinanie wartości wyjściowej lub zaokrąglanie wartości zmiennoprzecinkowej. Jeśli precision określono wartość 0, a wartość do przekonwertowania wynosi 0, wynik nie zawiera żadnych znaków wyjściowych, jak pokazano w tym przykładzie:

printf( "%.0d", 0 ); /* No characters output */

Jeśli specyfikacja precyzji jest gwiazdką (*), int argument z listy argumentów dostarcza wartość. Na liście precision argumentów argument musi poprzedzać sformatowaną wartość, jak pokazano w tym przykładzie:

printf( "%.*f", 3, 3.14159265 ); /* 3.142 output */

Znak type określa interpretację precision lub domyślną precyzję, gdy precision zostanie pominięta, jak pokazano w poniższej tabeli.

Wpływ wartości dokładności na typ

Type Znaczenie Domyślna
a, A Precyzja określa liczbę cyfr po punkcie. Domyślna precyzja to 13. Jeśli precyzja wynosi 0, nie jest drukowany żaden punkt dziesiętny, chyba że flaga # jest używana.
c, C Precyzja nie ma żadnego efektu. Znak jest drukowany.
d, i, o, u, x, X Precyzja określa minimalną liczbę cyfr do wydrukowania. Jeśli liczba cyfr w argumencie jest mniejsza niż precyzja, wartość wyjściowa jest dopełniona po lewej stronie zerami. Wartość nie jest obcinana, gdy liczba cyfr przekracza precyzję. Domyślna precyzja to 1.
e, E Precyzja określa liczbę cyfr do wydrukowania po przecinku dziesiętnym. Ostatnia cyfra drukowana jest zaokrąglona. Domyślna precyzja to 6. Jeśli precyzja wynosi 0 lub kropka (.) jest wyświetlana bez liczby po niej, żaden punkt dziesiętny nie jest drukowany.
f, F Wartość precyzji określa liczbę cyfr po przecinku dziesiętnego. Jeśli pojawi się punkt dziesiętny, przed nim pojawi się co najmniej jedna cyfra. Wartość jest zaokrąglona do odpowiedniej liczby cyfr. Domyślna precyzja to 6. Jeśli precyzja wynosi 0 lub jeśli kropka (.) pojawia się bez liczby po niej, żaden punkt dziesiętny nie jest drukowany.
g, G Precyzja określa maksymalną liczbę cyfr znaczących wydrukowanych. Wydrukowano sześć cyfr znaczących, a wszystkie końcowe zera zostały obcięte.
s, S Precyzja określa maksymalną liczbę znaków do wydrukowania. Znaki przekraczające precyzję nie są drukowane. Znaki są drukowane do momentu znalezienia znaku o wartości null.

Specyfikacja rozmiaru argumentu

W specyfikacji konwersji pole rozmiaru jest modyfikatorem długości argumentu dla specyfikatora konwersji typów . Prefiksy pól rozmiarudo pola typu — , h, ( ljmałe litery L), L, tllzw, I (wielkie litery i) I32i I64— określają "rozmiar" odpowiedniego argumentu —hh długi lub krótki, 32-bitowy lub 64-bitowy, jednobajtowy lub szeroki znak — w zależności od specyfikatora konwersji, który modyfikują. Te prefiksy rozmiaru są używane z znakami typów w printf rodzinach funkcji i wprintf w celu określenia interpretacji rozmiarów argumentów, jak pokazano w poniższej tabeli. Pole rozmiaru jest opcjonalne dla niektórych typów argumentów. Jeśli nie określono prefiksu rozmiaru, formatator używa argumentów liczb całkowitych — na przykład typów podpisanych lub niepodpisanychchar, longintshorti — jako typów 32-bitowych, a floatdoublelong double argumenty zmiennoprzecinkowe są używane jako typy 64-bitowe.intdouble To zachowanie jest zgodne z domyślnymi regułami podwyższania poziomu argumentów dla list argumentów zmiennych. Aby uzyskać więcej informacji na temat podwyższania poziomu argumentów, zobacz Wielokropek i Argumenty domyślne w wyrażeniach postfiksu. W systemach 32-bitowych i 64-bitowych specyfikacja konwersji 64-bitowej liczby całkowitej musi zawierać prefiks rozmiaru ll lub I64. W przeciwnym razie zachowanie formatującego jest niezdefiniowane.

Niektóre typy są różne rozmiary w 32-bitowym i 64-bitowym kodzie. Na przykład size_t ma długość 32 bitów w kodzie skompilowanym dla x86 i 64 bitów w kodzie skompilowanym dla x64. Aby utworzyć niezależny kod formatowania platformy dla typów zmiennych szerokości, można użyć modyfikatora rozmiaru argumentu o zmiennej szerokości. Zamiast tego należy użyć modyfikatora rozmiaru argumentu 64-bitowego i jawnie podwyższyć poziom argumentu o zmiennej szerokości do 64 bitów. Modyfikator rozmiaru argumentu specyficzny dla I firmy Microsoft (wielkie litery i) obsługuje argumenty liczb całkowitych o zmiennej szerokości, ale zalecamy modyfikatory specyficzne dla jtypu , ti z do przenoszenia.

Prefiksy rozmiarów specyfikatorów formatu printf i wprintf

Aby określić Użyj prefiksu Z specyfikatorem typu
char
unsigned char
hh d, , i, o, u, xlub X
short int
short unsigned int
h d, , i, o, u, xlub X
__int32
unsigned __int32
I32 d, , i, o, u, xlub X
__int64
unsigned __int64
I64 d, , i, o, u, xlub X
intmax_t
uintmax_t
j lub I64 d, , i, o, u, xlub X
long double l (małe litery L) lub L a, A, , e, fEFglubG
long int
long unsigned int
l (małe litery L) d, , i, o, u, xlub X
long long int
unsigned long long int
ll (małe litery LL) d, , i, o, u, xlub X
ptrdiff_t t lub I (wielkie litery i) d, , i, o, u, xlub X
size_t z lub I (wielkie litery i) d, , i, o, u, xlub X
Znak jednobajtowy h c lub C
Znak szeroki l (małe litery L) lub w c lub C
Ciąg znaków jednobajtowych h s, S lub Z
Ciąg z szerokim znakiem l (małe litery L) lub w s, S lub Z

Typy ptrdiff_t i size_t__int32 lub unsigned __int32 na platformach 32-bitowych oraz __int64unsigned __int64 na platformach 64-bitowych. Prefiksy I (wielkie litery i), j, ti z rozmiaru przyjmują poprawną szerokość argumentu dla platformy.

W języku Visual C++, chociaż long double jest odrębnym typem, ma taką samą reprezentację wewnętrzną jak double.

Specyfikator hc typu lub hC jest synonimem c funkcji printf i C funkcji w wprintf funkcjach. Specyfikator lctypu , lC, wclub wC jest synonimem C w printf funkcjach i w cwprintf funkcjach. Specyfikator hs typu lub hS jest synonimem s funkcji printf i S funkcji w wprintf funkcjach. Specyfikator lstypu , lS, wslub wS jest synonimem S w printf funkcjach i w s funkcjach.wprintf

Uwaga

Specyficzne dla firmy Microsoft:
( I wielkie litery i), I32, I64i w prefiksy modyfikatora rozmiaru argumentów są rozszerzeniami firmy Microsoft i nie są zgodne z normą ISO C. Prefiks h używany z danymi typu char i l prefiksem (małe litery L) używanym z danymi typu double są rozszerzeniami firmy Microsoft.

Zobacz też

printf, _printf_l, wprintf, _wprintf_l
printf_s, _printf_s_l, wprintf_s, _wprintf_s_l
printf_p Parametry pozycyjne