Macros para emissão de relatórios
This topic applies to:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Native only |
||||
Pro, Premium e Ultimate |
Native only |
Você pode usar o _RPTn, e _RPTFn macros, definidas em CRTDBG.H, para substituir o uso de printf instruções para depuração. Essas macros desaparecem automaticamente na sua versão de compilação quando _ Debug não for definido, portanto, não é necessário colocá-los na # ifdefs.
Macro |
Function |
---|---|
_RPT0, _RPT1, _RPT2, _RPT3, _RPT4 |
Gera uma seqüência de mensagem e de zero a quatro argumentos. Para _RPT1 por meio de _RPT4, a seqüência de caracteres de mensagem serve como um printf-seqüência de caracteres para os argumentos de formatação de estilo. |
_RPTF0, _RPTF1, _RPTF2, _RPTF4, |
Mesmo que _RPTn , mas essas macros também o número de linha e o nome do arquivo onde se encontra a macro de saída. |
Consider the following example:
#ifdef _DEBUG
if ( someVar > MAX_SOMEVAR )
printf( "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n",
someVar, otherVar );
#endif
Este código gera os valores de someVar e otherVar para stdout. Você pode usar a seguinte chamada _RPTF2 para relatar esses mesmos valores e, além disso, o número de linha e o nome do arquivo:
if (someVar > MAX_SOMEVAR) _RPTF2(_CRT_WARN, "In NameOfThisFunc( ), someVar= %d, otherVar= %d\n", someVar, otherVar );
Se você achar que um determinado aplicativo precisa de depurar a emissão de relatórios que não fornecem as macros fornecidas com a biblioteca de tempo de execução C, você pode gravar uma macro projetada especificamente para suas próprias necessidades. Em um dos seus arquivos de cabeçalho, por exemplo, você poderia incluir código como o seguinte para definir uma macro chamada 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
Uma chamada para ALERT_IF2 foi possível executar todas as funções da printf o código no início deste tópico:
ALERT_IF2(someVar > MAX_SOMEVAR, "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n", someVar, otherVar );
Porque uma macro personalizada pode ser alterada facilmente para relatar mais ou menos informações para diferentes destinos (dependendo do que é mais conveniente), essa abordagem pode ser especialmente útil conforme a evolução de suas necessidades de depuração.