Sdílet prostřednictvím


_ASSERT, _ASSERTE – makra

Vyhodnotí výraz a Generovat sestavu ladění, pokud je výsledek False (pouze ladicí verzi).

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);

Parametry

  • booleanExpression
    Výraz (včetně ukazatelů), který je vyhodnocen jako nenulová nebo 0.

Poznámky

_ASSERT a _ASSERTE makra poskytují čistý a jednoduchý mechanismus pro kontrolu předpokladů v průběhu ladění aplikace.Jsou velmi flexibilní, protože nemusí být uzavřeny v #ifdef jen příkazy zabránit jim v maloobchodní sestavení aplikace.Tato pružnost je dosaženo použitím _DEBUG makra._ASSERTa _ASSERTE jsou k dispozici pouze při _DEBUG je definován.Při _DEBUG je definováno není, volání makra budou odebrány během předběžného zpracování.

_ASSERTa _ASSERTE vyhodnotit jejich booleanExpression argument, a pokud je výsledek false (0), tiskem diagnostické zprávy a volání _CrtDbgReportW ke generování sestavy ladění._ASSERT Makro tiskne jednoduché diagnostické zprávy, zatímco _ASSERTE obsahuje řetězec představující výraz selhání ve zprávě.Tato makra Neprovádět žádnou akci při booleanExpression vyhodnocen jako nenulová.

_ASSERTa _ASSERTE vyvolat _CrtDbgReportW, což způsobí, že veškerý výstup do široké znaky a _ASSERTE správně vytiskne znaky Unicode v booleanExpression.

Vzhledem k tomu, _ASSERTE makro určuje selhání výrazu v sestavě generované, umožňuje uživatelům zjistit bez odkazu na zdrojový kód aplikace.Nevýhodou však existuje, že každý výraz vyhodnocen podle _ASSERTE je součástí výstupního souboru (ladicí verzi) aplikace jako řetězcová konstanta.Proto, pokud se velký počet volání _ASSERTE, tyto výrazy může výrazně zvětšit velikost výstupního souboru.

Pokud neurčíte jinak, se _CrtSetReportMode a _CrtSetReportFile funguje, zprávy se zobrazují v rozbalovacím dialogovém nastavení jsou rovnocenné:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReportnebo _CrtDbgReportW generuje sestavu, ladění a určuje jeho cíl nebo cíle, založené na aktuální sestavy režim nebo režimy a definované pro soubor _CRT_ASSERT typ sestavy.Ve výchozím přesměrováni chyby a selhání výrazu ladicí okno zprávy._CrtSetReportMode a _CrtSetReportFile funkce se používají k definování cílů pro každý typ zprávy.

Pokud je cíl ladicí okno zprávy a uživatel klepne Opakovat tlačítko, _CrtDbgReport nebo _CrtDbgReportW vrátí hodnotu 1, způsobuje _ASSERT a _ASSERTE makra pro spuštění ladicího programu, za předpokladu, že je povoleno ladění just-in-time (JIT).

Další informace o procesu vytváření sestav, naleznete _CrtDbgReport, _CrtDbgReportW funkce.Další informace o řešení selhání výrazu a použití těchto maker jako ladění chyba zpracování mechanismus, viz Pro ověřování a vytváření sestav pomocí makra.

_RPT, _RPTF ladění makra jsou také k dispozici pro generování sestavy ladění, ale vyhodnotí výraz._RPT Jednoduchou sestavu generovat makra._RPTF Makra zahrnout zdrojový soubor a číslo řádku kde byla volána makra sestavy generované sestavy.Navíc _ASSERTE makra ANSI uplatnit rutiny lze použít k ověření logiku programu.Tato rutina je k dispozici v debug a release verze knihoven.Je k dispozici verze širokého znaku z těchto maker (_RPTWn, _RPTFWn).Verze širokého znaku jsou shodné s verzí úzkými znaky, s tím rozdílem, že řetězce širokého znaku se používají pro všechny parametry řetězce a výstup.

I když _ASSERT a _ASSERTE jsou makra a jsou získány zahrnutím Crtdbg.h aplikace se musí propojit s jedním z následujících knihoven vzhledem k tomu, že tato makra volat další funkce run-time.

  • Libcmtd.lib
    S více vlákny statické knihovny, verze ladění.

  • Msvcrtd.lib
    Import knihovny pro Msvcr90d.dll ladicí verzi.

Požadavky

Makro

Požadované záhlaví

_ASSERT

<crtdbg.h>

_ASSERTE

<crtdbg.h>

Příklad

V tomto programu volání _ASSERT a _ASSERTE makra testování podmínky string1 == string2.Pokud je podmínka, tato makra vytisknout diagnostickou zprávu._RPTn a _RPTFn skupinu maker také uplatnit v tomto programu je alternativou printf funkce.

// crt_ASSERT_macro.c
// compile with: /D_DEBUG /MTd /Od /Zi /link /verbose:lib /debug
//
// This program uses the _ASSERT and _ASSERTE debugging macros.
//

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

int main()
{
   char *p1, *p2;

   // The Reporting Mode and File must be specified
   // before generating a debug report via an assert
   // or report macro.
   // This program sends all report types to STDOUT.
   _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);

   // Allocate and assign the pointer variables.
   p1 = (char *)malloc(10);
   strcpy_s(p1, 10, "I am p1");
   p2 = (char *)malloc(10);
   strcpy_s(p2, 10, "I am p2");

   // Use the report macros as a debugging
   // warning mechanism, similar to printf.
   // Use the assert macros to check if the 
   // p1 and p2 variables are equivalent.
   // If the expression fails, _ASSERTE will
   // include a string representation of the
   // failed expression in the report.
   // _ASSERT does not include the
   // expression in the generated report.
   _RPT0(_CRT_WARN,
       "Use the assert macros to evaluate the expression p1 == p2.\n");
   _RPTF2(_CRT_WARN, "\n Will _ASSERT find '%s' == '%s' ?\n", p1, p2);
   _ASSERT(p1 == p2);

   _RPTF2(_CRT_WARN, "\n\n Will _ASSERTE find '%s' == '%s' ?\n",
          p1, p2);
   _ASSERTE(p1 == p2);

   _RPT2(_CRT_ERROR, "'%s' != '%s'\n", p1, p2);

   free(p2);
   free(p1);

   return 0;
}
  

Ekvivalent v rozhraní .NET Framework

System::Diagnostics::Debug:: uplatnit

Viz také

Referenční dokumentace

Rutiny ladění

_RPT, _RPTF, _RPTW, _RPTFW – makra