c assert assertion handling c with examples
Tento C ++ Assert Tutorial osvětluje tvrzení v C ++, což jsou příkazy k testování předpokladů v programu vytvořeném programátorem:
jak otevřít soubor XML ve Wordu
V programu C ++ obvykle vytváříme předpoklady v programu, například index pole by měl být větší než nula.
Když se tyto předpoklady naplní, program spustí pokutu, ale když se tyto předpoklady stanou nepravdivými, program nekončí normálně.
=> Navštivte zde kompletní kurz C ++ od odborníků.
Co se naučíte:
Tvrzení v C ++
Assert je prohlášení v C ++, které testuje podmínku, jako je ta, která byla vysvětlena výše. Pokud je podmínka pravdivá, program pokračuje normálně a pokud je podmínka nepravdivá, program je ukončen a zobrazí se chybová zpráva.
Můžeme poskytnout tvrzení pomocí makra assert preprocesoru.
S celým číslem myInt můžeme deklarovat tvrzení, že myInt by mělo být> 0 následujícím způsobem.
assert (myInt > 0);
Předpokládejme, že hodnota zadaného myInt je -1, proto se tvrzení nezdaří, když kompilátor narazí na výše uvedený příkaz, protože hodnota myInt je -1. Jakmile tvrzení selže, je vydána zpráva uvádějící neplatné tvrzení spolu s názvem programu a číslem řádku a program je ukončen.
Obecný prototyp tvrzení je následující:
tvrdit (podmínka) kde podmínka => výraz skalárního typu
Assert je makro preprocesoru, které se používá k vyhodnocení podmíněného výrazu. Pokud podmíněný výraz vyhodnotí hodnotu false, je program po zobrazení chybové zprávy ukončen. Chybová zpráva se obvykle skládá z neúspěšného podmíněného výrazu, názvu souboru kódu a čísla řádku assert.
Tímto způsobem zjistíme, kde k problému došlo a jaký je problém, ke kterému došlo v kódu. Používání tvrzení proto ladění zefektivňuje.
Záhlaví C ++< kazeta > obsahuje funkci prosazení. Funkci assert v kódu většinou používáme ke kontrole, zda jsou parametry předané funkci platné, ke kontrole návratové hodnoty funkce nebo ke kontrole hranic pole mimo jiné.
Základní příklad uplatnění C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Výstup:

Ve výše uvedeném programu jsme použili volání assert, které obsahuje výraz (myInt! = NULL) ve funkci display_number. V hlavní funkci nejprve předáme proměnnou ukazatele second_ptr, která obsahuje adresu proměnné myptr. Po uskutečnění tohoto volání je tvrzení pravdivé. Provádění programu je tedy normální a hodnota se zobrazí.
Ve druhém volání display_number předáme nulový ukazatel, čímž provedeme assert false. Když se tedy uskuteční druhé volání, zobrazí se zpráva o neúspěšném tvrzení, jak je znázorněno na výstupu.
Zakázání tvrzení pomocí NDEBUG
Když použijeme tvrzení, jsou zkontrolována za běhu. Díky tvrzením je ladění efektivní, ale je třeba dbát na to, aby do sestavení verze aplikace nebyly zahrnuty tvrzení. Je to proto, že víme, že když vydáme aplikaci, uděláme to, pouze když jsme si jisti, že je aplikace důkladně otestována.
Po vydání softwaru tedy musíme deaktivovat všechna tvrzení. Můžeme zakázat tvrzení v programu pomocí makra NDEBUG. Použití makra NDEBUG v programu zakáže uplatnění všech volání.
Můžeme zahrnout řádek uvedený níže v programu k deaktivaci všech tvrzení tvrzení.
#define NDEBUG
Následující programy v C ++ ukazují, jak se program chová, když je NDEBUG komentován, i když je NDEBUG aktivní.
# 1) NDEBUG specifikováno, ale komentováno.
#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ýstup:
jak spustit soubory .jar v systému Windows 10

V tomto programu jsme zadali příkaz #define NDEBUG, ale je komentován. To znamená, že příkaz assert je aktivní. Když je tedy program spuštěn, druhé volání k prosazení vrátí hodnotu false a bliká chybová zpráva a program je přerušen.
# 2) NDEBUG je aktivní.
#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ýstup:

V tomto programu jsme odkomentovali makro NDEBUG. Nyní, když provádíme program, příkazy assert již nejsou aktivní. Proto program pokračuje v normálním provádění, i když je druhá podmínka v příkazu assert nepravdivá.
Odkomentováním řádku #define NDEBUG jsme tedy deaktivovali příkazy assert v programu.
Assert And static_assert
Tvrdení, které jsme dosud viděli, se provádí za běhu. C ++ podporuje ještě další formu tvrzení známou jako static_assert a provádí kontrolu tvrzení při kompilaci. Je přítomen od C ++ 11.
Static_assert má následující obecnou syntaxi.
static_assert (bool_constexpr, message)
Zde bool_constexpr => cContextově konvertovaný konstantní výraz typu bool.
Algoritmus dijkstra využívající prioritní frontu java
Zpráva => Řetězec, který se zobrazí jako chybová zpráva, pokud má bool_constexpr hodnotu false.
Pokud se tedy bool_constexpr vyhodnotí jako true, program postupuje normálně. Pokud bool_constexpr vyhodnotí jako false, pak je vydána chyba kompilátoru.
Níže uvedený program ukazuje použití static_assert v programu 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ýstup:

Ve výše uvedeném programu jsme poskytli static_assert s výrazem a zprávou. Když selže, vydá se chyba kompilátoru, jak je znázorněno na výstupu.
Často kladené otázky
Otázka č. 1) Co je Assert v C ++?
Odpovědět: Asert v C ++ je předdefinované makro, pomocí kterého můžeme testovat určité předpoklady, které jsou nastaveny v programu. Když je podmíněný výraz v příkazu assert nastaven na true, program pokračuje normálně. Ale když je výraz nepravdivý, je vydána chybová zpráva a program je ukončen.
Otázka 2) Co je static_assert?
Odpovědět: Static_assert je vyhodnocen v době kompilace oproti příkazu assert (), který je vyhodnocen za běhu.
Static_assert byl začleněn do C ++ od C ++ 11 a dále. Trvá podmíněný výraz a zprávu, která se zobrazí jako argumenty. Když se podmínka vyhodnotí jako false, dojde k chybě kompilátoru a zobrazí se zpráva. Program je poté ukončen.
Otázka č. 3) Jaký je účel makra assert ()?
Odpovědět: Makro Assert () se používá k testování podmínek nebo předpokladů, které by se v programu neměly vyskytovat. Například, index pole by měl být vždy> 0. Další předpoklad může být 2 + 2 == 3 + 1.
Takže pomocí assert () můžeme takové předpoklady otestovat a pokud se vyhodnotí jako pravdivé, náš program běží normálně. Pokud jsou nepravdivé, program je ukončen.
Závěr
V tomto kurzu jsme viděli fungování příkazů assert () v C ++. Příkaz assert () je definován v záhlaví. Můžeme zakázat tvrzení pomocí makra NDEBUG. Vývojáři by měli být opatrní, aby v produkčním kódu nebylo možné použít assert, protože se očekává, že je produkční kód důkladně testován a je bez chyb.
Kromě příkazu assert () C ++ 11 podporuje také static_assert (), který je vyhodnocen v době kompilace. Když static_asset () vyhodnotí jako false, dojde k chybě kompilátoru a program bude ukončen.
Tvrzení jsou způsob, jak otestovat předpoklady v programu a vyhodnocením podmíněných výrazů uvnitř tvrzení můžeme program důkladně otestovat a ladění bude efektivnější.
=> Zkontrolujte VŠECHNY výukové programy pro C ++ zde.
Doporučené čtení
- Výukový program pro zpracování výjimek C # s příklady kódu
- Příklady uplatnění selenu - praktické aplikace v projektech
- Struktura programu v C # a základní syntax s příklady
- Výukový program Python DateTime s příklady
- Vyjmout příkaz v Unixu s příklady
- Syntaxe příkazů Unix Cat, možnosti s příklady
- Použití kurzoru v MongoDB s příklady
- Příkaz LS v Unixu s příklady