Ca multe sisteme de programare în C, IAR Embedded Workbench pentru ARM are așa-numita ieșire formatată. Acest lucru simplifică ieșirea de text a tuturor tipurilor de date în consola de ecran sau într-un șir folosind funcțiile fprintf. printf. sprintf. vfprintf. vprintf și vsprintf. IAR (Ajutor -> Conținut - -> fila Căutare -> introduceți ieșirea formată în câmpul de introducere, apăsați Enter -> în lista de secțiuni care apare, faceți dublu clic pe Formatată ieșire DLIB).
În mod implicit, biblioteca DLIB este configurată pentru ieșirea din proiectul IAR. Unele funcții ale acestei biblioteci vă vor ajuta să transformați valorile datelor (variabile, constante) din reprezentarea lor internă într-un șir de text care poate fi citit de om. Veți furniza un șir de format (șir de format) ca valoare a argumentului format pentru fiecare funcție. Funcțiile fprintf, printf, sprintf, vfprintf, vprintf și vsprintf (definite în
[Formate de tipărire]
Șirul format are aceeași sintaxă pentru funcțiile de tipărire (cum ar fi pfrintf, sprintf, etc.), pentru funcțiile de scanare ale intrării formatate (funcții de scanare, cum ar fi sscanf). Parcurgerea sintaxei șirului este prezentată în diagramă.
Funcția de imprimare scanează șirul de formate de la început până la sfârșit pentru a determina ce conversii să efectueze. Fiecare funcție de imprimare acceptă un număr arbitrar de argumente sau funcționează sub controlul direct al unui argument de tip va_list. Unele dintre specificațiile de conversie a tipăririi din șirul format folosesc următorul parametru din listă. Funcția de imprimare utilizează fiecare dintre argumentele secvențiale nu mai mult de o dată. Unele dintre ultimele argumente (dacă nu au specificatorul de conversie corespunzător) pot rămâne neutilizate. În cazul în care argumentul nu este suficient (de exemplu, au arătat mai puțin decât există specificatori de conversie în șirul de format), atunci compilatorul va emite un mesaj de avertizare (Warning [Pe224]: șirul de format necesită argumente suplimentare LineNumber imya_modulya.c).
Mai departe în descriere sunt adoptate următoarele acorduri:
- conversiile întregi sunt parametrii de conversie care se termină în d. i. o. u. x. sau X
- conversiile în virgulă mobilă sunt parametrii de conversie care se termină în e. E. f. g. sau G
[Funcții de imprimare]
Pentru funcțiile de tipărire (printf, sprintf etc.), textul simplu sau un spațiu din șirul de format generează același text care corespunde șirului format. Specificația de conversie a tipăririi generează de obicei caractere prin conversia valorii următoare a argumentului în secvența de text corespunzătoare. Iată formatul specificației de conversie a tipăririi:
Textul bold din imagine prezintă caracteristicile adăugate la standardul C99.
După simbolul procentual (%) din șirul de formate, puteți specifica etichete zero sau mai multe formate:
- pentru o transformare aliniată la stânga
+ pentru a genera un semn plus pentru valori semnate care sunt pozitive
spațiu pentru a crea un spațiu pentru valori semnate care nu au un semn plus sau un semn minus (adică pentru valori pozitive)
# 0 pentru conversia prefix o, pentru conversia 0x prefix x, pentru conversia prefix 0X X, sau pentru a genera un punct zecimal și un număr de piese fracționare, care altfel ar fi suprimate pentru transformarea unui punct plutitor
0 pentru a completa transformarea cu zerouri de conducere după orice semn sau prefix, în absența unui semn de format minus (-) sau a preciziei specificate
După orice format de steaguri, puteți specifica lățimea câmpului (lățimea câmpului), care specifică numărul minim de caractere care se generează în timpul conversiei. Dacă nu se anulează steagul format, comportamentul implicit este în partea stângă pentru a completa conversia scurtă cu spații. Dacă specificați un asterisc (*) în loc de o valoare zecimală în câmpul de lățime, atunci funcția de imprimare are valoarea următorului argument (care trebuie să fie un tip întreg, int) ca câmp de lățime. Dacă argumentul are o valoare negativă, acesta oferă un semn de format "-" și o valoare de câmp de lățime.
După orice câmp de lățime, puteți specifica un punct (.) Urmat de precizie, care indică una dintre următoarele opțiuni:
- sau un număr minim de cifre pentru a genera o transformare întreg,
- sau numărul de cifre fracționate pentru a genera transformările e, E sau f,
- sau numărul maxim de cifre semnificative pentru transformările g sau G,
- sau numărul maxim de caractere pentru generarea șirului C (șir C) al conversiei s.
Puteți specifica * în loc de o cifră zecimală pentru acuratețe, funcția de imprimare luând ca valoare câmpul de precizie valoarea următorului argument (care trebuie să fie un tip întreg, int). Dacă argumentul are o valoare negativă, se folosește precizia prestabilită. Dacă nu ați specificat * sau un număr zecimal după punct, atunci precizia este zero.
[Specificați parametrii de conversie]
După specificarea câmpului de precizie, puteți specifica un specificator de conversie a tipăririi caracterelor. care poate fi precedată de un calificativ unic sau de două caractere. Fiecare combinație definește tipul care este necesar pentru conversia argumentului corespunzător (dacă există) și modul în care funcțiile bibliotecii modifică valoarea argumentului înainte de ao converti la un șir de text. Conversiile întreg și în virgulă mobilă definesc baza pentru utilizarea reprezentării textului. Dacă specificatorul de conversie necesită precizie p și nu l-ați furnizat în format, specificatorul de conversie selectează o valoare pentru valoarea prestabilită pentru precizie. Următorul tabel afișează toate combinațiile specificate și proprietățile acestora.
Instrument de conversie
(specificator de conversie)
Specificatorii de conversie a tipăririi definesc de asemenea orice comportament care nu este conținut în acest tabel. Pentru toate transformările cu virgulă mobilă:
- Infinitul pozitiv este tipărit ca inf sau inf (din cuvântul infinit).
- Negrul infinit este tipărit ca -inf sau -INF.
- Nu este un număr (Nu-un număr, NaN) este tipărit ca nan sau NAN.
Versiunile cu versiuni superioare tipăresc numai specificatorul de conversie în majuscule, cum ar fi% E, dar nu ca% Lg.
În exemple, simbolul p indică precizia. Exemplele urmează fiecare specificator de conversie. O singură conversie poate genera până la 509 de caractere.
Specificați% a sau% A pentru a genera o reprezentare hexazecimală semnată semnată, cu un exponent zecimal de gradul doi. Textul generat este obținut sub formă 0Xh.hhhP ± ± dd, în cazul în care ± fie plus sau minus, fie simbolul X x (pentru conversia% a) sau X (pentru conversia% A), simbolul h hexazecimal cifre, litere d zecimală punct cifre hexazecimal (.) este un punct zecimal pentru localizarea curentă, iar caracterul P este fie p (pentru% a) fie P (pentru conversia% A). Textul este generat un număr întreg, care este 0 doar pentru o valoare de zero, un punct de hexazecimal în cazul în care există un număr de fracție, sau dacă specificați pavilion formatul # pentru cele mai multe cifre p fractionale, fără zerouri, și cel puțin un exponent cifră fără zerouri la început. Rezultatul va fi rotunjit. Valoarea 0 are un exponent zero. exemple:
Specificați% c pentru a genera un caracter din valoarea convertită.
Introduceți ..% i. % o. % u. % x sau% X pentru a genera o reprezentare posibilă a unui număr întreg semnat. Opțiuni. sau% i zecimala punct cu semnul (decimal semnat),% o octal unsigned (octal unsigned),% u decimal unsigned (decimal unsigned),% x hexazecimal unsigned (hexazecimal unsigned) folosind simbolurile 0-9 și af% X unsigned hexazecimal folosind caracterele 0-9 și AF. Conversia generează cel puțin p cifre obținute din valoarea convertită. Dacă p este zero, atunci valoarea convertită 0 nu generează cifre.
Specificarea% e sau% E pentru generarea reprezentării fracțională zecimală a semnului (semnat zecimal fracționar) cu un exponent zecimal de grad 10. Textul generat va forma d.dddE ± ± dd, în cazul în care semnul ± fie plus sau minus, d decimal zecimale cifre punct (.) este punctul zecimal pentru localizarea curentă, E este fie e (pentru conversia% e), fie E (pentru conversia% E). Textul generat are o cifră întreagă, un punct zecimal dacă p este diferit de zero sau dacă specificați un pavilion fracțional de cifre p, și cel puțin două cifre exponențiale. Rezultatul este rotunjit. Valoarea 0 are un exponent zero.
Specificați% f sau% F pentru a genera o reprezentare fracționată zecimală cu un fragment zecimal semnat, fără exponent. Textul generat va fi sub formă de ± d.ddd, unde ± este un semn plus sau un semn minus, d este o zecimală și un punct zecimal (.) Este punctul zecimal pentru localizarea curentă. Textul generat are cel puțin o cifră întreagă, un punct zecimal, dacă p nu este zero sau dacă ați specificat semnalul format # și p cifre parțiale. Rezultatul este rotunjit.
Specificați% g sau% G pentru a genera o reprezentare fractională zecimală semnalizată fracționată care are sau nu un exponent zecimal de gradul 10, dacă este cazul. Pentru a converti% g, textul generat este produs în aceeași formă ca conversia% e sau% f. Pentru a converti% G, obțineți același format de text ca conversia% E sau% F. Precizia p indică numărul de cifre semnificative care trebuie generate (dacă p este zero, atunci se modifică cu 1). Dacă conversia lui% e duce la un exponent în intervalul (-4, p), atunci conversia% f va fi folosită în schimb. Textul generat nu va avea zerouri în orice parte fracționată și va avea un punct zecimal numai dacă există cifre care nu sunt de zero ale părții fracționare și dacă nu ați specificat pavilionul format.
Specificați% p pentru a genera vizualizarea externă a pointerului. Transformarea este definită de implementare.
Specificați% s pentru a genera o secvență de caractere din valorile stocate în argumentul C șir.
Specificați %% pentru a genera un simbol la sută (%).
[Configurarea funcțiilor de ieșire ale bibliotecii DLIB]
Capacitățile de ieșire din mediul IAR (care pot fi funcții ale printf, sprintf etc.) sunt determinate de setările bibliotecii DLIB. Setările sunt accesate prin proprietățile proiectului IAR: Opțiuni. -> Opțiuni generale -> fila Configurare bibliotecă, lista derulantă Bibliotecă. Setarea în această filă afectează nu numai printf, ci și alte funcții ale bibliotecii DLIB.
Există 4 opțiuni pentru a alege: None, Normal, Full, Custom. De obicei, alegeți opțiunea Complet.
Niciuna din această versiune a funcției de ieșire nu este disponibilă. Nu puteți utiliza ieșirea formatată în format printf în program.
Normal pentru această versiune nu acceptă setările regionale limba interfeței nu este setat localizarea C, nici un sprijin descriptor de fișier, nici un suport pentru șir multi-octet în format printf și scanf nu hexazecimale sprijinit numere în virgulă mobilă în strtod. Această opțiune funcționează mai repede și necesită mai puțină memorie decât cea completă și este adesea permisă în programe simple.
Configurație completă de runtime completă a bibliotecii C / C ++. Tot ceea ce nu era disponibil în Normal este acum acceptat.
Personalizat este o configurație personalizată a bibliotecii care este specificată de un antet plug-in extern (C-antet, fișier cu extensia .h).
Următoarea filă Opțiuni bibliotecă vă permite să personalizați posibilitățile de conversie pentru șirul de formate (adică, cum vor fi procesate specificațiile de conversie care încep cu%). Puteți specifica separat capabilitățile pentru printf (funcția de ieșire formatată) și pentru scanf (funcția de introducere formatată).
Tiny este opțiunea cea mai rapidă și cea mai dezbrăcată. Nu există suport pentru un, A, n, plutitor, mult timp, nu puteți folosi steaguri.
Micul este același cu micul, dar puteți utiliza steaguri de format.
Mare nu este doar suport pentru un, A, orice altceva este disponibil.
Sunt disponibile toate caracteristicile unei conversii formatate.
format șir de format de șir este un argument cu șir de caractere dublu pentru funcția de ieșire care conține specificațiile de conversie (marcate cu%, de exemplu, "% i", "% 02X") din argumentele rămase.
starea de schimbare inițială
specificațiile conversiei specificațiile conversiei - începând cu semnul procentual (%) codificat într-un mod special, regulile de conversie la textul argumentelor funcției de ieșire.
va_list tipul de obiect pentru a furniza informații contextuale, inițializate de va_start și utilizând va_arg pentru a accesa alte argumente anonime. Este utilizat în funcții cu un număr variabil de parametri de tip printf.
va_start este o macrocomandă care stochează informațiile despre contextul inițial despre un obiect definit de aplicație. Numele ultim-par este numele ultimului parametru pe care îl specificați. De exemplu, ultimul par va fi b pentru a defini funcția int f (int a, int b.).
va_arg macro care trece următorul parametru în ordinea specificată de informațiile de context specificate în aplicație. Argumentele suplimentare trebuie să aibă un tip de obiect Ty după aplicarea regulilor pentru a reprezenta parametrii în absența funcției prototip.