Прототип функции assert:
void assert(int expression);
Заголовочный файл:
| Название | Язык |
|---|---|
| assert.h | С |
| cassert | С++ |
Описание
Функция assert оценивает выражение, которое передается ей в качестве аргумента, через параметр expression. Если аргумент-выражение этого макроса в функциональной форме равно нулю (т.е. выражение ложно), сообщение записывается на стандартное устройство вывода ошибок и вызывается функция abort, работа программы прекращается.
Содержание сообщения об ошибке зависит от конкретной реализации компилятора, но любое сообщение должно состоять из: выражения, которое assert оценивает, имя файла c ошибкой и номер строки, где произошла ошибка. Обычный формат сообщения об ошибке :
Функция assert не будет доступна, если в момент включения <cassert> макрос с именем NDEBUG уже будет определен. То есть, при отладке программы, мы можем неограниченное количество раз вызывать assert. После отладки программы, не будет надобности в вызванных нами функциях assert. Вручную выискивать каждую функцию — неблагодарный труд. В С++ определён макрос NDEBUG, который отключит все assert функции за нас. Наша задача — просто включить эту строку в код программы:
#define NDEBUG // в начале файла исходного кода, перед включением заголовочного файла <cassert>
Параметры:
- expression
Выражение для оценки. Если логическое выражение в параметреexpressionравно 0, функцияassertнемедленно завершает программу.
Возвращаемое значение
нет
Пример: исходный код программы
// пример использования функции assert
#include <iostream> // для оператора cout
#include <cassert> // для функции assert
void print_adds(int* value)
{
assert(value != NULL);
std::cout << "Адрес значения в памяти = "
<< value << std::endl;
}
int main()
{
int a = 10;
int *ptr1 = &a; // указатель на переменную a
int *ptr2 = NULL; // нулевой указатель
print_adds(ptr1); // вызов функции с ненулевым указателем
print_adds(ptr2); // вызов функции с нулевым указателем
return 0;
}
Пример работы программы
В этом примере, функция assert используется, чтобы прервать выполнение программы, если функции print_adds в качестве аргумента передаётся нулевой указатель. В программе, первый вызов функции print_adds завершается успешно. Второй вызов, в качестве аргумента, принимает нулевой указатель ptr2. И как раз в этот момент срабатывает функция assert, она оценивает выражение, в данном случае нулевой указатель. Нулевой указатель не указывает ни на какой блок памяти, поэтому assert сигнализирует об ошибке и немедленно завершает работу программы.
er: ../er/main.cpp:7: void print_adds(int*): Assertion `value != __null’ failed.
Комментарии