Синтаксис этого макроса такой:
ASSERT(bAssumption);
ASSERT(a>=o);
Если этой функции будет в качестве аргумента передано отрицательное значение, то макрос выдаст предупреждение в виде таблички.(рис 2.2)
При использовании ASSERT помните, что при создании серийного выпуска все макросы ASSERT удаляются из приложения. Если в параметре, передаваемом этому макросу запрограммирована логическая часть программы, то она тоже будет удалена.
Для тестирования классов и объектов в коде можно использовать две разновидности ASSERT. Первая из них ASSERT_VALID вызывается следующим образом:
ASSERT_VALID(pObject);
Эта версия макроса используется для тестирования объектов в приложении. С ее помощью контролируется правильность объектов и проверяется непротиворечивость внутреннего состояния. Параметр, передаваемый в этот макрос - это обрабатываемый объект С++.
Макрос ASSERT_VALID применим не ко всем объектам С++. Объект должен быть наследником базового класса CObject и должен иметь переопределенную функцию-член(метод) AssertValid. Для большинства стандартных классов библиотеки MFC эти критерии удовлетворяются. Когда тестируете собственные классы, необходимо помнить об этих требованиях, выдвигаемых при проектировании классов.
Вторая разновидность макроса ASSERT -это ASSERT_KINDOF,вызов которого выглядит так:
ASSERT_KINDOF(klassname,pObject);
Этот макрос определяет относится объект к определенному классу или является производным от определенного класса. Первый параметр - это имя класса, экземпляром которого должен быть второй параметр.
Эта функция может использоваться только для проверки класса, удовлетворяющего определенным критериям - например он должен быть потомком класса CObject и должен иметь один из двух других используемых в описании класса макросов. Два макроса, хотя бы один из который должен использоваться классом - это DECLARE_DINAMIC и DECLARE_SERIAL.
Так же как и макрос ASSERT оба этих варианта полностью удаляются из серийного выпуска, поэтому не используйте данные макросы в логической части программы. Вы можете применить эти макросы в вашем коде только для контроля допущений.
Еще одна разновидность ASSERT отличается от других, хотя в принципе все они похожи друг на друга. Это макрос VERIFY (проверить). Его используют так же как и макрос ASSERT.
VERIFY(bAssumption);
Единственное ключевое различие между макросами VERIFY(ПРОВЕРИТЬ)
и ASSERT(ДОБАВИТЬ УТВЕРЖДЕНИЕ)заключается в том, что любая логическая часть, переданная как параметр в макрос VERIFY ,остается и в серийном выпуске приложения. Это означает ,что вы можете помещать исполняемые участки программы в параметр макроса VERIFY ,причем эти участки не будут удалены при построении серийного выпуска. Однако как и макрос ASSERT ,макрос VERIFY может только проверять значение выражения и выдавать сообщение, если при построении отладочного выпуска выражение приняло значение false (ложь).
Так же как и в случае с макросом ASSERT ,все вызовы макроса TRACE автоматически удаляются при построении серийного выпуска.
Существуют две разновидности функции printf. Первая fprintf, позволяет записывать строковое сообщение в файл или на выводное устройство. На самом деле функция printf содержит вызов функции fprintf, в котором указано ,на какое стандартное выводное устройство нужно послать строку. Кроме того есть функция sprintf, которая формирует строку и помещает ее в символьный массив. Иногда эти функции используются и в программах на С++.