116__________________________________________Глава 2

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

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

2.4.8.11 Некоторые приемы программирования, встраивающие
отладку в код

Материал данного раздела предполагает наличие у читателя определенных
сведений о программировании на языке C++ и о некоторых компонентах C++Buil-
der. Тем, кто этими сведениями пока не обладает, можно пропустить этот раздел и
вернуться к нему позднее.

В C++Builder имеется полезный инструмент для отладки — функция assert.
Ее синтаксис:

ttinclude <assert.h>
void assert(int test);

Функция применяется при отладке программ для проверки истинности утвер-
ждений test, которые по замыслу должны быть истинны, но в силу каких-то оши-
бок могут нарушаться. Если проверяемое утверждение test окажется ложным (воз-
вращает 0), работа приложения завершается вызовом функции abort и выдается
сообщение об ошибке.

Попробуйте использовать эту процедуру в вашем тестовом приложении. Изме-
ните, например, цикл в этом приложении на следующий:

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

А *= 10000;

assert(A < le300) ;

}

В этом коде проверяется условие А < 10300 и если оно нарушается, то выдается
сообщение об ошибке. Если вы запустите свое приложение, то при повторном щел
чке на кнопке получите сообщение, представленное на рис. 2.50. В нем, отобража
ется условие, которое проверялось, а также модуль и строка, в которой произошло
данное событие.

Закономерен вопрос: «А зачем нужна специальная функция assert, если то же
самое можно было бы сделать простым оператором if?». Особенностью и преиму-
ществом функции assert является то, что она реализована в виде макроса, кото
рый развертывается в соответствующую функцию только в случае, если не опреде-
лен идентификатор NDEBUG. Поэтому достаточно вставить в ваш файл перед ди-
рективой

ttinclude <assert.h>
директиву

ftdefine NDEBUG

Рис. 2.50

Окно сообщения функции
assert