Sdílet prostřednictvím


Kontrolní výraz a uživatelem zadané zprávy (C++)

Jazyk C++ podporuje tři mechanismy zpracování chyb, které vám pomůžou ladit aplikaci: direktivu #error, klíčové slovo static_assert a makro assert, _assert _wassert makrem. Všechny tři mechanismy vyvolávají chybové zprávy a dva z nich také testují kontrolní výrazy softwaru. Kontrolní výraz softwaru určuje podmínku, kterou očekáváte, že bude pravdivá v určitém bodě programu. Pokud kontrolní výraz doby kompilace selže, kompilátor vyvolá chybu kompilace a diagnostických zpráv. Selže-li kontrolní výraz modulu běhu, operační systém vyvolá diagnostickou zprávu a ukončí aplikaci.

Poznámky

Životnost aplikace je tvořena předběžným zpracováním, kompilací a fází doby běhu. Každý mechanismus zpracování chyb přistupuje k informacím o ladění, které jsou k dispozici v průběhu jedné z těchto fází. Pro efektivní ladění je třeba zvolit mechanismus, který poskytuje příslušné informace o této fázi:

  • Direktiva #error se používá při předběžném zpracování. Bezpodmínečně vysílá zprávy zadané uživatelem a způsobí selhání kompilace s chybou. Zpráva může obsahovat text, který je zpracováván direktivami preprocesoru, není však vyhodnocen žádný výsledný výraz.

  • Deklarace static_assert se projeví v době kompilace. Testuje kontrolní výrazy softwaru, jež jsou reprezentovány pomocí integrálního výrazu zadaného uživatelem, který lze převést na hodnotu typu Boolean. Je-li výraz vyhodnocen jako nula (false), kompilátor vyvolá uživatelem definovanou zprávu a kompilace selže s chybou.

    Deklarace static_assert je zvláště užitečná pro šablony ladění, protože argumenty šablony mohou být součástí výrazu definovaného uživatelem.

  • Makro assert, _assert, _wassert makro se projeví za běhu. Vyhodnotí výraz definovaný uživatelem, a pokud je výsledek nula, systém vyvolá diagnostickou zprávu a ukončí aplikaci. Mnoho dalších maker, například_ASSERT a _ASSERTE, se podobá tomuto makre, ale vydávají různé systémové nebo uživatelem definované diagnostické zprávy.

Viz také

#error – direktiva (C++)
assert Macro, _assert, _wassert
_ASSERT, _ASSERTE, _ASSERT_EXPR Macros
static_assert
_STATIC_ASSERT – makro
Šablony