c assert assertion handling c with examples
Acest tutorial de afirmare C ++ aruncă lumină asupra afirmațiilor din C ++ care sunt declarații pentru a testa ipotezele din programul realizat de programator:
youtube la mp3 mai mult de 30 de minute
Într-un program C ++, de obicei facem presupuneri într-un program, cum ar fi un index de matrice ar trebui să fie mai mare decât zero.
Când aceste ipoteze se împlinesc, programul rulează bine, dar când aceste ipoteze devin false, programul nu se termină normal.
=> Vizitați aici pentru cursul complet C ++ de la experți.
Ce veți învăța:
Afirmații în C ++
O afirmare este o afirmație în C ++ care testează o afecțiune precum cea explicată mai sus. Dacă condiția este adevărată, programul continuă normal și dacă condiția este falsă, programul este încheiat și se afișează un mesaj de eroare.
Putem furniza o afirmație folosind o macro preprocesator de afirmare.
Cu numărul întreg myInt, putem declara o afirmație spunând că myInt ar trebui să fie> 0 în felul următor.
assert (myInt > 0);
Să presupunem că valoarea myInt specificată este -1, prin urmare afirmația eșuează atunci când compilatorul întâlnește declarația de mai sus, deoarece valoarea myInt este -1. Odată ce afirmația eșuează, este emis un mesaj care afirmă afirmația nevalidă împreună cu numele programului și numărul liniei, iar programul este terminat.
Un prototip general de afirmare este după cum urmează:
afirmă (condiție) unde condiție => expresie de tip scalar
O afirmare este o macro preprocesor care este utilizată pentru a evalua o expresie condițională. Dacă expresia condițională evaluează fals, atunci programul se termină după afișarea mesajului de eroare. Mesajul de eroare constă în mod obișnuit din expresia condițională eșuată, numele fișierului de cod și numărul de linie al afirmării.
Astfel, vom afla unde a apărut problema, precum și care este problema care a apărut în cod. Prin urmare, utilizarea afirmațiilor face ca depanarea să fie mai eficientă.
Antetul C ++< cassert > conține funcționalitatea de afirmare. Folosim mai ales funcționalitatea asert din cod pentru a verifica dacă parametrii trecuți unei funcții sunt valabili, pentru a verifica valoarea returnată a unei funcții sau pentru a verifica limitele matricei, printre altele.
Exemplu de bază de afirmare C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Ieșire:
În programul de mai sus, am folosit un apel de afirmare care conține expresia (myInt! = NULL) în funcția display_number. În funcția principală mai întâi, trecem o variabilă pointer second_ptr care conține adresa variabilei myptr. Când se face acest apel, afirmarea este adevărată. Prin urmare, execuția programului este normală și valoarea este afișată.
În al doilea apel către display_number, trecem indicatorul nul, făcând astfel afirmarea falsă. Astfel, atunci când este efectuat al doilea apel, deoarece mesajul eșuat de afirmare este afișat așa cum se arată în ieșire.
Dezactivarea afirmării cu NDEBUG
Când folosim afirmații, acestea sunt verificate în timpul rulării. Afirmațiile fac depanarea eficientă, dar trebuie să aveți grijă să nu includeți afirmațiile în versiunea de lansare a aplicației. Acest lucru se datorează faptului că știm că atunci când lansăm o aplicație, o facem doar atunci când suntem siguri că aplicația este testată temeinic.
Deci, trebuie să dezactivăm toate afirmațiile atunci când lansăm software-ul. Putem dezactiva afirmațiile într-un program utilizând macrocomanda NDEBUG. Utilizarea macro-ului NDEBUG într-un program dezactivează toate apelurile de afirmat.
Putem include o linie dată mai jos în program pentru a dezactiva toate declarațiile de afirmare.
#define NDEBUG
Urmărirea programelor C ++ arată cum se comportă programul atunci când NDEBUG este comentat, precum și când NDEBUG este activ.
# 1) NDEBUG specificat, dar comentat.
#include // uncomment to disable assert() //#define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Asset disabled...execution continuous with invalid expression
'; }
Ieșire:
cum se deschide un fișier torrent
În acest program, am specificat declarația #define NDEBUG, dar este comentată. Aceasta înseamnă că afirmația afirmă este activă. Astfel, atunci când programul este executat, al doilea apel de afirmare returnează fals și un mesaj de eroare este intermitent și programul este întrerupt.
# 2) NDEBUG este activ.
#include // uncomment: assert() disabled #define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Ieșire:
În acest program, am descomentat macrocomanda NDEBUG. Acum, când executăm programul, declarațiile de afirmare nu mai sunt active. Prin urmare, programul își continuă execuția normală chiar și atunci când a doua condiție din declarația afirmă este falsă.
Astfel, decomentând linia #define NDEBUG, am dezactivat declarațiile de afirmare din program.
Afirmați și afirmați static
Afirmația pe care am văzut-o până acum este executată în timpul rulării. C ++ acceptă încă o altă formă de afirmare cunoscută sub numele de static_assert și efectuează verificarea afirmării în timp de compilare. Este prezent încă din C ++ 11.
Un static_assert are următoarea sintaxă generală.
static_assert (bool_constexpr, message)
Aici bool_constexpr => cExpresia constantă convertită contextual de tip bool.
cum se deschid fișiere dat pe Windows
Mesaj => Șir care va apărea ca mesaj de eroare dacă bool_constexpr este fals.
Deci, dacă bool_constexpr se evaluează la adevărat, programul continuă normal. Dacă bool_constexpr se evaluează la fals, atunci se emite o eroare de compilator.
Programul de mai jos arată utilizarea static_assert într-un program C ++.
#include #include using namespace std; int main() { assert(2+2==3+1); static_assert(2+2==3+1, '2+2 = 3+1'); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); static_assert(2+2==1+1, '2+2 != 1+1'); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Ieșire:
În programul de mai sus, am furnizat static_assert o expresie și un mesaj. Când eșuează, se emite o eroare de compilator așa cum se arată în ieșire.
întrebări frecvente
Q # 1) Ce este Assert în C ++?
Răspuns: O afirmare în C ++ este o macro predefinită folosind care putem testa anumite ipoteze care sunt setate în program. Când expresia condițională dintr-o declarație asertă este setată la adevărat, programul continuă normal. Dar când expresia este falsă, este emis un mesaj de eroare și programul este terminat.
Q # 2) Ce este static_assert?
Răspuns: Static_assert este evaluat la momentul compilării față de declarația assert () care este evaluată la timpul de execuție.
Static_assert a fost încorporat în C ++ începând cu C ++ 11. Este nevoie de expresia condițională și un mesaj pentru a fi afișate ca argumente. Când condiția este evaluată ca fiind falsă, se emite o eroare de compilator și mesajul este afișat. Programul este apoi încheiat.
Î # 3) Care este scopul macro-ului assert ()?
Răspuns: Macrocomanda Assert () este utilizată pentru a testa condițiile sau ipotezele care nu ar trebui să apară într-un program. De exemplu, indicele matrice ar trebui să fie întotdeauna> 0. O altă presupunere poate fi 2 + 2 == 3 + 1.
Prin urmare, folosind assert () putem testa astfel de ipoteze și, atâta timp cât acestea sunt evaluate, programul nostru rulează normal. Când sunt false, programul este terminat.
Concluzie
În acest tutorial, am văzut funcționarea declarațiilor assert () în C ++. Instrucțiunea assert () este definită în antet. Putem dezactiva afirmarea folosind macrocomanda NDEBUG. Dezvoltatorii ar trebui să fie atenți ca afirmarea să nu poată fi utilizată în codul de producție, deoarece este de așteptat ca codul de producție să fie testat temeinic și să nu conțină erori.
În afară de declarația assert (), C ++ 11 acceptă și static_assert () care este evaluat la compilare. Când static_asset () este evaluat ca fiind fals, se emite o eroare de compilare și programul este terminat.
Afirmațiile sunt o modalitate de a testa ipotezele din program și prin evaluarea expresiilor condiționale din afirmații, putem testa programul temeinic și depanarea devine mai eficientă.
=> Verificați TOATE tutorialele C ++ aici.
Lectură recomandată
- Tutorial de gestionare a excepțiilor C # cu exemple de cod
- Exemple de afirmare a seleniului - Aplicații practice în proiecte
- Structura programului C # și sintaxa de bază cu exemple
- Tutorial Python DateTime cu exemple
- Tăiați comanda în Unix cu exemple
- Sintaxa de comandă Cat Unix, Opțiuni cu exemple
- Utilizarea cursorului în MongoDB cu exemple
- Comanda Ls în Unix cu exemple