Assert.h

Стандартная библиотека
языка программирования С
  • assert.h
  • complex.h (C99)
  • ctype.h
  • errno.h
  • fenv.h (C99)
  • float.h
  • inttypes.h (C99)
  • iso646.h
  • limits.h
  • locale.h
  • math.h
  • setjmp.h
  • signal.h
  • stdalign.h (C11)
  • stdarg.h
  • stdatomic.h (C11)
  • stdbool.h (C99)
  • stddef.h
  • stdint.h (C99)
  • stdio.h
  • stdlib.h
  • stdnoreturn.h (C11)
  • string.h
  • tgmath.h
  • threads.h (C11)
  • time.h
  • uchar.h (C11)
  • wchar.h
  • wctype.h

assert.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляется макрос препроцессора языка С assert(). Данный макрос реализует исключение, которое может использоваться для проверки сделанных программой вычислений.

Макросы

Макрос assert() добавляет к программе процедуру диагностики. После выполнения, если выражение ложно (то есть, результат сравнения 0), assert() пишет информацию о вызове в поток stderr и вызывает функцию abort(). Информация, которая пишется в stderr включает в себя:

  • имя файла с исходным кодом (предопределённый макрос __FILE__)
  • строка у файла с исходным кодом (предопределённый макрос __LINE__)
  • функция в исходном коде (предопределённый макрос __func__) (добавлено в стандарте C99)
  • текст выражения, значение которого равно нулю 0


Для того, чтобы отключить проверку, необязательно исключать её из кода или комментировать объявление макроса, достаточно лишь объявить ещё один макрос — NDEBUG в программе перед #include <assert.h>:

#define NDEBUG

тогда объявление макроса assert() будет иметь следующий вид:

#define assert(ignore)((void) 0)

и поэтому никак не будет влиять на работу программы.

Макрос assert() переопределяется каждый раз при подключении assert.h в зависимости от макроса NDEBUG.[1]

Макрос assert() реализован в виде макроса, а не функции. Если макрос assert используется для возможности вызывать саму функцию assert, то верное функционирование кода не гарантируется.

Пример использования

#include <stdio.h>
#include <assert.h>

int main (void)
{
    FILE *fd;

    fd = fopen ("/home/user/file.txt", "r");
    assert (fd);
    fclose (fd);

    return 0;
}

В данном примере макрос assert() сработает в случае, если функция fopen() выполнится с ошибкой.

См. также

  • Утверждение (программирование)

Ссылки

Примечания

  1. ISO/IEC 9899:1999  (неопр.). Дата обращения: 31 июля 2011. Архивировано 22 августа 2011 года.