Sdílet prostřednictvím


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

Jazyk C++ podporuje tři mechanismy zpracování chyb umožňujících ladění aplikace: direktiva #error, klíčové slovo static_assert a makro assert (CRT).Všechny tři mechanismy vyvolávaní chybové zprávy a dva z nich také testují kontrolní výrazy software.Softwarové tvrzení určuje podmínku, u které očekáváte, že bude true, v určitém místě v aplikaci.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, vyvolá operační systém 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 je v platnosti v době předzpracová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, ale žádný výsledný výraz není vyhodnocen.

  • Deklarace static_assert je v platnosti v době kompilace.Testuje kontrolní výrazy software, které 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), vyvolá kompilátor uživatelem definovanou zprávu a kompilátor 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 (CRT) je v platnosti v době 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, jako_ASSERT a _ASSERTE se tomuto makru podobá, ale vyvolává různé systémem a uživatelem definované diagnostické zprávy.

Viz také

Referenční dokumentace

#error – direktiva (C++)

assert (CRT)

_ASSERT, _ASSERTE – makra

static_assert

_STATIC_ASSERT – makro

Další zdroje

Šablony