c assert assertion handling c with examples
Tento výučbový program pre C ++ objasňuje tvrdenia v jazyku C ++, čo sú príkazy na testovanie predpokladov v programe, ktoré vytvoril programátor:
webové služby testujúce otázky a odpovede na pohovor
V programe C ++ zvyčajne predpokladáme, že index v poli by mal byť väčší ako nula.
Keď sa tieto predpoklady naplnia, program spustí pokutu, ale keď sa stanú nepravdivými, program sa nekončí normálne.
=> Navštívte tu kompletný kurz C ++ od odborníkov.
Čo sa dozviete:
Tvrdenia v C ++
Tvrdenie je vyhlásenie v C ++, ktoré testuje stav, ako je ten, ktorý je vysvetlený vyššie. Ak je podmienka pravdivá, program pokračuje normálne a ak je podmienka nepravdivá, program sa ukončí a zobrazí sa chybové hlásenie.
Môžeme poskytnúť tvrdenie pomocou makra assert preprocesora.
S celým číslom myInt môžeme nasledujúcim spôsobom deklarovať tvrdenie, ktoré hovorí, že myInt by malo byť> 0.
assert (myInt > 0);
Predpokladajme, že hodnota zadaného myInt je -1, preto tvrdenie zlyhá, keď kompilátor narazí na vyššie uvedený výrok, pretože hodnota myInt je -1. Len čo tvrdenie zlyhá, zobrazí sa správa s neplatným tvrdením, názvom programu a číslom riadku a program sa ukončí.
Všeobecný prototyp tvrdenia je nasledovný:
tvrdiť (podmienka) kde podmienka => vyjadrenie skalárneho typu
Tvrdenie je makro preprocesora, ktoré sa používa na vyhodnotenie podmieneného výrazu. Ak podmienený výraz vyhodnotí ako nepravdivý, program sa po zobrazení chybovej správy ukončí. Chybové hlásenie sa zvyčajne skladá zo zlyhaného podmieneného výrazu, názvu súboru s kódom a čísla riadku tvrdenia.
Takto spoznáme, kde sa vyskytol problém a aký je problém, ktorý sa vyskytol v kóde. Používanie tvrdení preto zefektívňuje ladenie.
Hlavička C ++< kazeta > obsahuje funkčnosť tvrdenia. Funkciu assert v kóde používame väčšinou na to, aby sme skontrolovali platnosť parametrov odovzdaných funkcii, aby sme skontrolovali návratovú hodnotu funkcie alebo okrem iného skontrolovali hranice poľa.
Základný príklad uplatnenia jazyka C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Výkon:

Vo vyššie uvedenom programe sme použili tvrdenie volania, ktoré obsahuje výraz (myInt! = NULL) vo funkcii display_number. V hlavnej funkcii najskôr odovzdáme ukazovateľovú premennú second_ptr, ktorá obsahuje adresu premennej myptr. Po uskutočnení tohto hovoru je tvrdenie pravdivé. Vykonanie programu je teda normálne a hodnota sa zobrazí.
V druhom volaní display_number odovzdáme nulový ukazovateľ, čím urobíme assert false. Keď sa teda uskutoční druhý hovor, zobrazí sa správa o zlyhaní tvrdenia, ako je to znázornené na výstupe.
Zakázanie tvrdenia pomocou NDEBUG
Keď použijeme tvrdenia, skontrolujú sa za behu. Vďaka tvrdeniam je ladenie efektívne, je však potrebné dbať na to, aby nezahŕňalo tvrdenia do zostavenia vydania aplikácie. Je to tak preto, lebo vieme, že pri vydaní aplikácie to urobíme, iba ak sme si istí, že je aplikácia dôkladne otestovaná.
Po vydaní softvéru musíme deaktivovať všetky tvrdenia. Môžeme zakázať tvrdenia v programe pomocou makra NDEBUG. Použitie makra NDEBUG v programe zakáže uplatnenie všetkých hovorov.
Do programu môžeme zahrnúť riadok uvedený nižšie, ktorý zakáže všetky tvrdenia.
#define NDEBUG
Nasledujúce programy v C ++ ukazujú, ako sa program správa, keď je komentovaný NDEBUG, aj keď je NDEBUG aktívny.
# 1) NDEBUG zadané, ale komentované.
#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
'; }
Výkon:
ako spustiť súbory .jar v systéme Windows 10

V tomto programe sme zadali príkaz #define NDEBUG, ale je komentovaný. To znamená, že tvrdenie je aktívne. Takže keď je program vykonaný, druhé volanie na potvrdenie vráti hodnotu false, bliká chybové hlásenie a program je prerušený.
# 2) NDEBUG je aktívny.
#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
'; }
Výkon:

V tomto programe sme odkomentovali makro NDEBUG. Teraz, keď spustíme program, príkazy assert už nie sú aktívne. Preto program pokračuje v normálnom vykonávaní, aj keď je druhá podmienka v príkaze assert nepravdivá.
Odkomentovaním riadku #define NDEBUG sme teda deaktivovali príkazy assert v programe.
Assert And static_assert
Tvrdenie, ktoré sme doteraz videli, sa vykonáva za behu programu. C ++ podporuje ešte ďalšiu formu tvrdenia, známu ako static_assert, a vykonáva kontrolu tvrdenia pri kompilácii. Je prítomný od C ++ 11.
Statický_assert má nasledujúcu všeobecnú syntax.
static_assert (bool_constexpr, message)
Tu bool_constexpr => c Kontextovo konvertovaný konštantný výraz typu bool.
Správa => Reťazec, ktorý sa zobrazí ako chybové hlásenie, ak má hodnota bool_constexpr hodnotu false.
Takže ak bool_constexpr vyhodnotí ako true, program bude postupovať normálne. Ak bool_constexpr vyhodnotí ako false, vydá sa chyba kompilátora.
Nasledujúci program ukazuje použitie static_assert v programe 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
'; }
Výkon:

Vo vyššie uvedenom programe sme poskytli static_assert s výrazom a správou. Ak zlyhá, zobrazí sa chyba kompilátora, ako je to znázornené na výstupe.
často kladené otázky
Otázka č. 1) Čo je to Assert v C ++?
Odpoveď: Tvrdenie v C ++ je preddefinované makro, pomocou ktorého môžeme testovať určité predpoklady, ktoré sú stanovené v programe. Keď je podmienený výraz v príkaze assert nastavený na true, program pokračuje normálne. Ak je ale výraz nepravdivý, zobrazí sa chybové hlásenie a program sa ukončí.
Otázka 2) Čo je static_assert?
ako tlačiť pole v opačnom poradí
Odpoveď: Static_assert sa vyhodnocuje v čase kompilácie oproti príkazu assert (), ktorý sa vyhodnocuje za behu.
Static_assert bol začlenený do C ++ od C ++ 11 a novších. Trvá podmienený výraz a správa, ktorá sa má zobraziť ako argumenty. Keď sa podmienka vyhodnotí ako nepravdivá, zobrazí sa chyba kompilátora a zobrazí sa správa. Program sa potom ukončí.
Otázka č. 3) Aký je účel makra assert ()?
Odpoveď: Makro Assert () sa používa na testovanie podmienok alebo predpokladov, ktoré by sa v programe nemali vyskytnúť. Napríklad, index poľa by mal byť vždy> 0. Ďalším predpokladom môže byť 2 + 2 == 3 + 1.
Takže pomocou assert () môžeme tieto predpoklady otestovať a pokiaľ sa vyhodnotia ako pravdivé, náš program beží normálne. Ak sú nepravdivé, program sa ukončí.
Záver
V tomto tutoriáli sme videli fungovanie príkazov assert () v C ++. Príkaz assert () je definovaný v hlavičke. Tvrdenie môžeme deaktivovať pomocou makra NDEBUG. Vývojári by mali byť opatrní, aby sa v produkčnom kóde nemohlo použiť tvrdenie, pretože sa očakáva, že je produkčný kód dôkladne testovaný a neobsahuje chyby.
Okrem príkazu assert () C ++ 11 podporuje aj static_assert (), ktorý sa vyhodnocuje v čase kompilácie. Keď static_asset () vyhodnotí ako nepravdivé, vydá sa chyba kompilátora a program sa ukončí.
Tvrdenia sú spôsobom, ako otestovať predpoklady v programe, a hodnotením podmienených výrazov vo vnútri tvrdení môžeme program dôkladne otestovať a ladenie bude efektívnejšie.
=> Skontrolujte VŠETKY výukové programy pre C ++ tu.
Odporúčané čítanie
- Výukový program na spracovanie výnimiek C # s príkladmi kódu
- Príklady uplatnenia selénu - praktické aplikácie v projektoch
- C # Štruktúra programu a základná syntax s príkladmi
- Výukový program pre Python DateTime s príkladmi
- Vystrihnite príkaz v systéme Unix s príkladmi
- Syntax príkazov Unix Cat, možnosti s príkladmi
- Používanie kurzora v MongoDB s príkladmi
- Príkaz Ls v systéme Unix s príkladmi