Макросы _RPT, _RPTF, _RPTW, _RPTFW
Отслеживает ход выполнения приложения путем создания отчета отладки (только отладочная версия). Обратите внимание, что n определяет количество аргументов в args и может быть 0, 1, 2, 3, 4 или 5.
_RPTn(
reportType,
format,
...[args]
);
_RPTFn(
reportType,
format,
[args]
);
_RPTWn(
reportType,
format
[args]
);
_RPTFWn(
reportType,
format
[args]
);
Параметры
reportType
Тип отчета: _CRT_WARN, _CRT_ERROR или _CRT_ASSERT.format
Строка управления форматом, которая используется для создания сообщения пользователя.args
Аргументы подстановки, используемые format.
Заметки
Все эти макросы принимают параметры reportTypeи format. Кроме того, они также могут принимать до четырех дополнительных аргументов, обозначенных числом, добавленным к имени макроса. Например, _RPT0 и _RPTF0 не принимает дополнительные аргументы, _RPT1 и _RPTF1 принимают arg1, _RPT2 и _RPTF2 принимают arg1 и arg2 и т. д.
Макросы _RPT и _RPTF похожи на функцию printf, поскольку их можно использовать для отслеживания хода выполнения приложения в процессе отладки. Однако эти макросы обеспечивают большую гибкость, чем printf, поскольку нет необходимости включать их в операторы #ifdef, чтобы предотвратить их вызов в итоговом построении приложения. Эта гибкость достигается с помощью макроса _DEBUG; макросы _RPT и _RPTF доступны только когда флаг _DEBUG установлен. Если _DEBUG не указан, вызовы этих макросов удаляются во время предварительной обработки.
Макросы _RPTW и _RPTFW являются версией для расширенных символов этих макросов. Они подобны wprintf и принимают в качестве аргументов строки расширенных символов.
Макросы _RPT вызывают функцию _CrtDbgReport для создания отчета по отладке с сообщением пользователя. Макросы _RPTW вызывают функцию _CrtDbgReportW для создания того же отчета с расширенными символами. Макросы _RPTF и _RPTFW создают отчеты отладки, где указан файл исходного кода и номер строки, где был вызван макрос отчета, в дополнение к сообщению пользователя. Сообщение пользователя создается путем замены аргументов arg[n] в строке format, используя те же правила, которые определены функцией printf.
_CrtDbgReport или _CrtDbgReportW создают отчеты отладки и определяют его место назначения на основании текущих режимов отчета и файла, определенного для reportType. Функции _CrtSetReportMode и _CrtSetReportFile используются для определения назначения для каждого типа отчета.
Если вызывается макрос _RPT и при этом не вызывается ни _CrtSetReportMode, ни _CrtSetReportFile, то сообщения отображаются следующим образом.
Тип отчета |
Назначение вывода |
---|---|
_CRT_WARN |
Текст предупреждения не отображается. |
_CRT_ERROR |
Всплывающее окно. То же самое, как если бы _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW); была задана. |
_CRT_ASSERT |
Эквивалентно _CRT_ERROR. |
Когда место назначения - это окно сообщения отладки, и пользователь нажимает кнопку Повторить, _CrtDbgReport или _CrtDbgReportW возвращают 1, приводя к тому, что эти макросы запускают отладчик при условии, что JIT отладка включена. Дополнительные сведения об использование этих макросов в качестве механизма обработки ошибок отладки см. в разделе Using Macros for Verification and Reporting.
Существуют два других макроса, которые создают отчеты отладки. Макрос _ASSERT создает отчет, но только если его аргумент-выражение принимает значение FALSE. _ASSERTE выполняется точно так же, как и _ASSERT, но включает выражение в созданный отчет.
Требования
Макрос |
Обязательный заголовок |
---|---|
Макросы _RPT |
<crtdbg.h> |
Макросы _RPTF |
<crtdbg.h> |
Макросы _RPTW |
<crtdbg.h> |
Макросы _RPTFW |
<crtdbg.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Библиотеки
Только отладочные версии Библиотеки времени выполнения языка C.
Хотя они являются макросами и получаются путем включения Crtdbg.h, приложение должно подключить одну из отладочных библиотек, поскольку эти макросы вызывают другие функции времени выполнения.
Пример
См. пример в разделе _ASSERT.
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.