118______________________________________________Глава 2

Вызов такого макроса My Assert может выглядеть аналогично вызову преды
дущего макроса:

MyAssertfA < 1е300, "А = " +FloatToStr(A) + ", i = " + IntToStr(i));

Преимущество реализации отладок макросами заключается в том, что вы мо
жете вставить их вызовы, которые выглядят весьма компактно, в различных час;

тях своей программы. А когда все отладки закончены, можете отключить их все.
введя в свой файл директиву

ttdefine NDEBUG

Вы можете, конечно, обойтись и без макросов, введя в тех или иных местах
программы операторы, обеспечивающие отладку. При этом целесообразно окру-
жать эти операторы отладки следующими директивами:

ttifndef NDEBUG

операторы отладки
#endif

Операторы отладки должны обеспечивать отладочную печать, которая помога-
ет следить за ходом выполнения приложения. В C+4-Builder для отображения от-
ладочной информации, на мой взгляд, удобен компонент TMemo — многострочное
• окно редактирования. В него можно заносить отладочные данные и тут же, во вре-
мя выполнения приложения просматривать их. Чтобы этот компонент не занимал
место на форме, его можно выводить в отдельное окно. Приведу без особых ком-
ментариев, как это можно было бы сделать в нашем тестовом примере, если бы нам
вдруг для отладки захотелось наблюдать, как изменяются в цикле переменные.

// форма отладочного окна

TForm * FDebug;

//компонент вывода в отладочном окне

TMemo * Memol;

//—————————————————————-

void   fastcall TFormI::FormCreate(TObject *Sender)

{       —

ftifndef NDEBUG

// создание отладочного окна и окна редактирования в нем

FDebug = new TForm(this);

FDebug->Caption = "Отладка";

Memol = new TMemo(FDebug);

Memol->Parent = FDebug;

Memol->ScrollBars = ssVertical;

Memol->Align = alclient;

FDebug->Show() ;

#endif

>

//—————————————————————-

void   fastcall TFormI::FormDestroy(TObject *Sender)
(

#ifndef NDEBUG
// освобождение памяти
FDebug->Release();

ttendif
i

//———————————:—————————-

void_fastcall TFormI::ButtonlClick(TObject *Sender)
{

for(int i = 0; i < 50; i++)

(
A *= 10000;

ftifndef NDEBUG
//отладочная печать