Assert.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() выполнится с ошибкой.
См. также
Ссылки
assert.h— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)
Примечания
- ↑ ISO/IEC 9899:1999. Дата обращения: 31 июля 2011. Архивировано 22 августа 2011 года.