assert: функция сообщения об ошибке в С++

Прототип функции assert:

void assert(int expression);

Заголовочный файл:

Название Язык
assert.h С
cassert С++

Описание

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

Содержание сообщения об ошибке зависит от конкретной реализации компилятора, но любое сообщение должно состоять из: выражения, которое assert оценивает, имя файла  c ошибкой и номер строки, где произошла ошибка. Обычный формат сообщения об ошибке :

filename: line number: expression: аssertion failed:   

Функция 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 сигнализирует об ошибке и немедленно завершает работу программы.

CppStudio.com
Адрес значения в памяти = 0x7fff5900f8ac
er: ../er/main.cpp:7: void print_adds(int*): Assertion `value != __null’ failed.
Автор: admin
Дата: 05.09.2012
Поделиться:

Комментарии

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.