afirma.h

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Biblioteca standard C ++
Biblioteca standard a C


assert.h este fișierul antet standard al bibliotecii C care definește macro assert() ul assert() . Această macro implementează un sistem de verificare a afirmațiilor , care poate fi utilizat pentru a verifica și controla posibila apariție a cazurilor „imposibile” în program.

Nume Descriere
assert Când această macrocomandă este executată, calculează rezultatul expresiei date: dacă se dovedește a fi falsă (cu alte cuvinte, dacă valoarea finală este 0), assert scrie câteva informații de depanare la stderr și apoi apelează funcția de abort() . Informațiile raportate pe stderr includ:
  • textul expresiei care a dat rezultatul 0
  • numele fișierului sursă (macro-ul implicit __FILE__)
  • numărul liniei pe care a eșuat afirmația (macro implicit __LINE__)

Utilitatea macro-ului assert() constă în simplitatea cu care se poate verifica o afirmație care este considerată, într-un context dat, trivial evident: de exemplu, verificarea dublă a valorii unei variabile pe care s-au efectuat deja verificări . În următorul cod, macrocomanda assert() este utilizată pentru a verifica dacă valoarea variabilei „aleasă” se încadrează de fapt în intervalul valid, chiar dacă ieșirea din bucla while afirmă implicit adevărul acestei condiții.

 int choice = 0;

face {

    / * Văd un meniu cu 4 opțiuni numerotate de la 1 la 4 * /
    scanf ("% d", & choice);

} while (alegere <1 || alegere> 4);

/ * Primul bloc de operații efectuate pe baza valorii alese * /

afirma (alegere> = 1 && alegere <= 4);

/ * Al doilea bloc de operații efectuate pe baza valorii alese * /

Folosind assert() , programatorul verifică din nou că starea care a cauzat ieșirea din bucla while este încă adevărată: în acest caz, de exemplu, verifică dacă nu a modificat accidental valoarea variabilei scelta în primul bloc al operațiuni.
Utilizarea assert() ar trebui să fie limitată doar la faza de dezvoltare a unui program: din cauza brutalității metodei de închidere a executabilului și a penuriei de informații despre eroarea furnizată pe ecran, ar fi destul de frustrant pentru final utilizator dacă este utilizat în versiunea finală a unei aplicații. O bună programare ar dori, de fapt, să i se explice utilizatorului ce cauză a declanșat problema și, dacă nu este posibil să se continue execuția, cel puțin să permită o salvare parțială a stării programului. Pentru aceasta, un cod similar cu:

 int * ptr = malloc (sizeof (int) * 10);
afirmă (ptr! = NULL);
/ * folosind ptr * /

nu este o utilizare optimă a assert() , deoarece, deși rar, este posibil ca o alocare dinamică a memoriei să eșueze.

Atunci când programatorul nu mai are nevoie de afirmații, în loc să le șteargă pe toate manual, poate defini constanta NDEBUG înainte de a include antetul assert.h în fișierul sursă: în acest fel, macro assert() ul assert() este extins pur și simplu la:

 #define asert (ignore) ((nul) 0)

eliminând astfel toate interacțiunile posibile cu programul. Prin urmare, trebuie remarcat faptul că, în acest caz, expresia trecută la assert() nu este evaluată. Ca expresii inserate în interiorul assert() , cele cu efecte secundare, cum ar fi de exemplu

 afirmă (* i ++);

care ar ajunge să modifice logica programului în conformitate cu definiția sau nu a constantei NDEBUG . În acest exemplu, de fapt, la sfârșitul verificării afirmației, valoarea indicatorului i ar fi mărită cu o unitate dacă NDEBUG nu NDEBUG definit, în timp ce ar rămâne neschimbat în cazul opus.

Elemente conexe

Alte proiecte

linkuri externe