Sdílet prostřednictvím


_ASSERT, _ASSERTE makra

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

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);

Parametry

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

Poznámky

_ASSERT a _ASSERTE makra poskytnout čistý a jednoduchý mechanismus pro kontrolu předpokladů během ladění aplikace.Že jsou velmi flexibilní, protože nemusí být uzavřeny v #ifdef nazývá výkazy a zabránit jim v prodejní sestavení aplikace.Tato pružnost je dosaženo použitím _DEBUG makro._ASSERTa _ASSERTE jsou k dispozici pouze při _DEBUG je definován.Při _DEBUG je volání makra, nejsou definovány, budou odebrány při úpravě před zpracováním.

_ASSERTa _ASSERTE vyhodnotit jejich booleanExpression argument, a pokud je výsledek false (0), tisk diagnostické zprávy a volání _CrtDbgReportW ke generování sestavy ladění._ASSERT Makro vytiskne jednoduchých diagnostických zpráv, zatímco _ASSERTE zahrnuje zprávy řetězcové vyjádření výrazu se nezdařilo.Tato makra neprovádějte žádnou akci při booleanExpression vyhodnocen jako nenulová.

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

Protože _ASSERTE makro Určuje výraz selhání vygenerované sestavy, umožňuje uživatelům identifikovat problém bez odkazující na zdrojový kód aplikace.Nevýhodou však existuje, že každý výraz vyhodnocen _ASSERTE je zahrnuta ve výstupním souboru (ladicí verze), aplikace jako řetězcová konstanta.Proto pokud velký počet volání _ASSERTE, tyto výrazy může výrazně zvětšit velikost výstupního souboru.

Pokud jste se _CrtSetReportMode a _CrtSetReportFile funkce zprávy se zobrazí v místní dialogové ekvivalentní nastavení:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

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

Kdy cíl je okno zprávy ladění 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 vykazování naleznete _CrtDbgReport, _CrtDbgReportW funkce.Další informace o řešení selhání výrazu a použití těchto maker jako ladění chyb zpracování mechanismus naleznete Použití makra pro ověření a hlášení.

_RPT, _RPTF ladění makra jsou také k dispozici pro generování sestavy ladění, ale jejich výraz nelze vyhodnotit._RPT Makra generovat jednoduché sestavy._RPTF Makra zahrnout soubor a řádek číslo zdroje kde byla volána makra sestavy generované sestavy.Kromě _ASSERTE makra ANSI výrazu rutina lze použít k ověření programu logiku.Tato rutina je k dispozici v debug a release verze knihoven.Jsou k dispozici verze znaků tato makra (_RPTWn, _RPTFWn).Verze znaků jsou shodné s úzkými znaky verze s výjimkou, že řetězce znaků, které se používají pro všechny parametry řetězce a výstup.

Přestože _ASSERT a _ASSERTE jsou makra a jsou získány zahrnutím Crtdbg.h aplikace musí propojit s jedním z následujících knihoven protože tato makra volání jiných funkcí runtime.

  • Libcmtd.lib
    Multithread statické knihovny ladicí verze.

  • Msvcrtd.lib
    Importovat knihovnu pro Msvcr90d.dll ladicí verze.

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 podmínka, tisk těchto maker diagnostické zprávy._RPTn a _RPTFn skupinu maker rovněž vykonávána v tomto programu jako alternativu k 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:: výrazu

Viz také

Referenční dokumentace

Ladění rutin

_RPT, _RPTF, _RPTW, _RPTFW makra