Прототип функции 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.
Комментарии