Megosztás a következőn keresztül:


_ASSERT, _ASSERTEmakrók _ASSERT_EXPR

Értékelje ki a kifejezést, és hozzon létre hibakeresési jelentést, ha az eredmény ( false csak a hibakeresési verzió).

Szemantika

// Typical usage:
_ASSERT_EXPR( booleanExpression, message );
_ASSERT( booleanExpression );
_ASSERTE( booleanExpression );

Paraméterek

booleanExpression
Skaláris kifejezés (beleértve a mutatókifejezéseket is), amely a nemzero (true) vagy a 0 (false) értéket értékeli ki.

message
A jelentés részeként megjelenítendő széles sztring.

Megjegyzések

A _ASSERT_EXPR, _ASSERT és _ASSERTE a makrók egy tiszta és egyszerű mechanizmust biztosítanak az alkalmazások számára a feltételezések hibakeresési folyamat során történő ellenőrzéséhez. Rugalmasak, mert nem kell az utasításokat beszedni #ifdef , hogy megakadályozzák, hogy egy alkalmazás kiskereskedelmi buildjében meghívják őket. Ez a rugalmasság a _DEBUG makró használatával érhető el. _ASSERT_EXPR, _ASSERT és _ASSERTE csak akkor érhetők el, ha _DEBUG a fordítási időpontban van definiálva. Ha _DEBUG nincs definiálva, az előfeldolgozás során ezekre a makrókra irányuló hívások törlődnek.

_ASSERT_EXPR, _ASSERT és _ASSERTE kiértékeli az argumentumukat booleanExpression , és ha az eredmény (0) lesz false , diagnosztikai üzenetet nyomtatnak ki, és felhívják _CrtDbgReportW a hibakeresési jelentés létrehozására. A _ASSERT makró egy egyszerű diagnosztikai üzenetet nyomtat ki, _ASSERTE a sikertelen kifejezés sztring-ábrázolását tartalmazza az üzenetben, és _ASSERT_EXPR tartalmazza a message sztringet a diagnosztikai üzenetben. Ezek a makrók nem tesznek semmit, ha booleanExpression nem aero értékre értékelik őket.

_ASSERT_EXPR, _ASSERT és _ASSERTE meghívja _CrtDbgReportW, ami miatt az összes kimenet széles karakterekkel jelenik meg. _ASSERTE megfelelően nyomtatja ki a Unicode-karaktereket, booleanExpression és _ASSERT_EXPR Unicode-karaktereket nyomtat ki a fájlban message.

Mivel a _ASSERTE makró megadja a sikertelen kifejezést, és _ASSERT_EXPR lehetővé teszi egy üzenet megadását a létrehozott jelentésben, lehetővé teszik a felhasználók számára a probléma azonosítását anélkül, hogy az alkalmazás forráskódjára hivatkoznának. Hátránya azonban az, hogy minden message kinyomtatott _ASSERT_EXPR és kiértékelt _ASSERTE kifejezés sztringállandóként szerepel az alkalmazás kimeneti (hibakeresési) fájljában. Ezért, ha nagy számú hívás történik _ASSERT_EXPR_ASSERTEvagy , ezek a kifejezések jelentősen növelhetik a kimeneti fájl méretét.

Ha másként nem adja meg a függvényeket és _CrtSetReportFile a _CrtSetReportMode függvényeket, az üzenetek a beállításnak megfelelő előugró párbeszédpanelen jelennek meg:

_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReportW létrehozza a hibakeresési jelentést, és meghatározza a célhelyet vagy célhelyet a jelentéstípushoz _CRT_ASSERT definiált jelenlegi jelentésmód vagy módok és fájlok alapján. Alapértelmezés szerint az érvényesítési hibák és hibák egy hibakeresési üzenetablakba lesznek irányítva. Az _CrtSetReportMode egyes jelentéstípusok célhelyeit a függvények és _CrtSetReportFile a függvények határozzák meg.

Ha a cél egy hibakeresési üzenetablak, és a felhasználó az Újrapróbálkozás gombot választja, _CrtDbgReportW az 1 értéket adja vissza, és a _ASSERT_EXPR_ASSERT_ASSERTE makrók elindítják a hibakeresőt, ha engedélyezve van az igény szerinti (JIT) hibakeresés.

A jelentéskészítési folyamatról további információt az _CrtDbgReport, _CrtDbgReportW függvény tartalmaz. A helyességi hibák elhárításáról és a makrók hibakeresési hibakezelési mechanizmusként való használatáról további információt a makrók jelentéskészítéshez című témakörben talál.

A makrók mellett _ASSERT a assert makró a programlogika ellenőrzésére is használható. Ez a makró a kódtárak hibakeresési és kiadási verzióiban is elérhető. A _RPThibakeresési _RPTF makrók hibakeresési jelentések létrehozásához is elérhetők, de nem értékelnek ki kifejezéseket. A _RPT makrók egyszerű jelentést hoznak létre. A _RPTF makrók tartalmazzák a forrásfájlt és a sorszámot, amelyben a jelentésmakrót meghívták a létrehozott jelentésben. Ezeknek a makróknak széles karakterverziói érhetők el (_RPTW, _RPTFW). A széles karakterverziók megegyeznek a keskeny karakterverziókkal, azzal a kivételrel, hogy a széles karaktersztringek minden sztringparaméterhez és kimenethez használhatók.

Bár _ASSERT_EXPRaz _ASSERT_ASSERTE alkalmazásnak <crtdbg.h>a C futásidejű kódtár hibakeresési verziójához kell kapcsolódnia, mivel _DEBUG ezek a makrók más futásidejű függvényeket is meghívnak.

Requirements

Macro Kötelező fejléc
\, \, \ <crtdbg.h>

Example

Ebben a programban a rendszer hívásokat indít a _ASSERT_ASSERTE feltétel string1 == string2teszteléséhez a makrókhoz és a makrókhoz. Ha a feltétel meghiúsul, ezek a makrók diagnosztikai üzenetet nyomtatnak. A _RPT program a makrók és _RPTF a makrók csoportját is gyakorolja a függvény alternatívaként printf .

// 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;
}
Use the assert macros to evaluate the expression p1 == p2.
crt_ASSERT_macro.c(54) :
Will _ASSERT find 'I am p1' == 'I am p2' ?
crt_ASSERT_macro.c(55) : Assertion failed!
crt_ASSERT_macro.c(58) :

Will _ASSERTE find 'I am p1' == 'I am p2' ?
crt_ASSERT_macro.c(59) : Assertion failed: p1 == p2
'I am p1' != 'I am p2'

Lásd még

Hibakeresési rutinok
assert Makró, _assert, _wassert
_RPT, _RPTF, _RPTW_RPTFW Makrók