_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