Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как работают CRT'шные отладочные макросы


Автор: Royan 8.12.2005, 22:46
В MSDN'е по этому поводу совсем капли, а как работает тот или иной макрос я, честно говоря, совсем понять не могу.

Вот пример использования (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxconcrtassertions.asp):
Код

#define _ASSERTE(expr) \
   do { \
      if (!(expr) && (1 == _CrtDbgReport( \
         _CRT_ASSERT, __FILE__, __LINE__, #expr))) \
         _CrtDbgBreak(); \
   } while (0)


А вот как задефайнен этот макрос (см. crtdbg.h):
Код

#define _CrtDbgBreak()                      ((void)0)

Для сравнения вот еще несколько:
Код

#define _CrtSetBreakAlloc(a)                ((long)0)
#define _CrtCheckMemory()                   ((int)1)
#define _CrtSetDbgFlag(f)                   ((int)0)
#define _CrtDoForAllClientObjects(f, c)     ((void)0)


и как оно работает?

Автор: Void 8.12.2005, 22:52
_CrtDebugBreak определен как ((void) 0) в окружении #ifndef _DEBUG ... #endif, если же _DEBUG определен, разворачивается в прототип соответствующей функции-ловушки CRT.
Или что-то другое непонятно?

Автор: Royan 9.12.2005, 02:35
Все понял, не внимательность моя беда, спасибо Void. Я не увидел #ifndef _DEBUG ... #endif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)