Makra pro vytváření sestav
Lze použít _RPTn, a _RPTFn maker, definovaných v CRTDBG.H použití nahradit printf příkazy pro ladění.Tato makra automaticky zmizí ve vaší verzi sestavení při _DEBUG není definována, takže není nutné k uzavření je v #ifdefs.
Makro |
Description |
---|---|
_RPT0, _RPT1, _RPT2, _RPT3, _RPT4 |
Výstupem řetězec zprávy a nula čtyři argumenty.Pro _RPT1 až _RPT4, řetězec zpráva slouží jako řetězec formátování pro argumenty printf stylu. |
_RPTF0, _RPTF1, ,_RPTF2, _RPTF4 |
Stejné jako _RPTn , ale tato makra také výstup souboru název a číslo řádku kde se makro nachází. |
Příklad:
#ifdef _DEBUG
if ( someVar > MAX_SOMEVAR )
printf( "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n",
someVar, otherVar );
#endif
Tento kód vypíše hodnoty someVar a otherVar k stdout.Můžete použít následující volání _RPTF2 hlášení tyto stejné hodnoty a dále souboru název a číslo řádku:
if (someVar > MAX_SOMEVAR) _RPTF2(_CRT_WARN, "In NameOfThisFunc( ), someVar= %d, otherVar= %d\n", someVar, otherVar );
Pokud zjistíte, že určité aplikace potřebuje ladění hlášení, které neobsahují makra dodávaná s běhové knihovny jazyka C, můžete napsat makra, navrženy tak, aby vyhovovaly vašim požadavkům.V jednom z vašich souborů hlaviček, například můžete zahrnout kód jako následující definovat makro nazvané ALERT_IF2:
#ifndef _DEBUG /* For RELEASE builds */
#define ALERT_IF2(expr, msg, arg1, arg2) do {} while (0)
#else /* For DEBUG builds */
#define ALERT_IF2(expr, msg, arg1, arg2) \
do { \
if ((expr) && \
(1 == _CrtDbgReport(_CRT_ERROR, \
__FILE__, __LINE__, msg, arg1, arg2))) \
_CrtDbgBreak( ); \
} while (0)
#endif
Jedno volání ALERT_IF2 by mohl provádět všechny funkce printf kód na začátku tohoto tématu:
ALERT_IF2(someVar > MAX_SOMEVAR, "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n", someVar, otherVar );
Vzhledem k tomu, že vlastní makro lze snadno změnit více či méně podávat informace do různých míst (podle toho, co je vhodnější), tento přístup může být užitečné, jak rozvíjet své požadavky na ladění.