assert.h

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


assert.h este standardul C biblioteca fișierul header care definește assert() macro. Aceasta pune în aplicare macro o afirmație de sistem de verificare, care pot fi utilizate pentru a verifica și de a controla posibila apariție a cazurilor „imposibil“ în program.

Nume Descriere
assert Atunci când acest macro este executat, acesta calculează rezultatul expresiei dată: în cazul în care se dovedește a fi falsă (cu alte cuvinte, în cazul în care valoarea finală este 0), assert scrie unele depanare informații stderr și apoi solicită abort() funcția abort() . Informațiile raportate pe stderr include:
  • textul expresiei care a dat rezultatul 0
  • numele fișierului sursă (The __FILE__ macro implicit)
  • numărul liniei pe care afirmația a eșuat (__LINE__ implicit macro)

Utilitatea assert() minciuni macro în simplitatea cu care o declarație poate fi verificat că este considerat, într - un context dat, trivial evidente: de exemplu, dublu-verificarea valorii unei variabile pe care au fost deja efectuate verificări . În următorul cod, assert() macro este folosit pentru a verifica dacă valoarea variabilei „aleasă“ este de fapt în intervalul valid, chiar dacă ieșirea din buclă în timp ce afirmă implicit adevărul acestei condiții.

 alegere int = 0;

face {

    / * Am vedea un meniu cu 4 opțiuni numerotate de 1 - 4 * /
    scanf ( "% d", & alegere);

} În timp ce (alegerea <1 || alegere> 4);

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

assert (choice> = 1 && alegere <= 4);

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

Utilizarea assert() , controalele programator din nou că starea care a cauzat ieșirea din bucla în timp ce este încă adevărat: în acest caz, de exemplu, el verifică faptul că el nu și- a schimbat din greșeală valoarea scelta variabilei în primul bloc operațiuni.
Utilizarea assert() ar trebui să fie limitată doar la faza de dezvoltare a unui program: din cauza brutalitatea metodei de închidere executabil și lipsa de informații cu privire la eroarea furnizată pe ecran, ar fi destul de frustrant pentru sfârșitul anului utilizator dacă este folosit în versiunea finală a unei cereri. Bună programare ar dori, de fapt, să se explice utilizatorului ce cauza a declanșat problema și, în cazul în care nu este posibil să se continue executarea sa, cel puțin să permită o economie parțială a programului statutului. Pentru aceasta, un cod similar cu:

 int * = malloc ptr (sizeof (int) * 10);
assert (PTR = NULL!);
/ * Folosind PTR * /

nu este o utilizare optimă a assert() , pentru că, deși rar, este posibil ca o alocare dinamică a memoriei pentru a eșua.

În cazul în care programatorul nu mai are nevoie de aserțiunile, în loc să ștergeți - le pe toate manual , el poate defini constanta NDEBUG înainte de a include antetul assert.h în fișierul sursă: în acest fel, assert() macro este pur și simplu extins la:

 assert #define (ignora) ((void) 0)

eliminând astfel toate interacțiunile posibile cu programul. Prin urmare, ar trebui 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 ,

 assert (* i ++);

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

Elemente conexe

Alte proiecte

linkuri externe