Показать меню

assert.h

10.12.2020
116

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.

Макрос 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() выполнится с ошибкой.

Еще по этой теме:
discuz
01:10, 10 декабрь
discuz
Discuz — бесплатный веб-форум с открытым (de facto) исходным кодом, разработанный на скриптовом языке PHP, поддерживающий различные СУБД, включая MySQL, PostgreSQL, MS SQL Server, MS Access, а также
Turbo Delphi
21:52, 08 декабрь
Turbo Delphi
Turbo Delphi — интегрированная среда разработки (IDE), разработанная компанией CodeGear, ориентированная в первую очередь на студентов, индивидуальных пользователей и программистов-любителей.
Haskell
07:58, 08 декабрь
Haskell
Haskell (hæskəl) — стандартизированный чистый функциональный язык программирования общего назначения. Является одним из самых распространённых языков программирования с поддержкой отложенных
Список ORM-библиотек
01:38, 08 декабрь
Список ORM-библиотек
Здесь представлен список существующего программного обеспечения ORM. C++ Flex Athena Framework, с открытым исходным кодом Flex ORM, встроенная поддержка мультиарендности Java ActiveJDBC — Java
Интерфейс (объектно-ориентированное программирование)
23:25, 07 декабрь
Интерфейс (объектно-ориентированное программирование)
Интерфейс (англ. interface) — программная/синтаксическая структура, определяющая отношение между объектами, которые разделяют определённое множество и не связаны никак иначе. При проектировании
Правило одного определения
05:26, 05 декабрь
Правило одного определения
Правило одного определения (One Definition Rule, ODR) — один из основных принципов языка программирования C++. Назначение ODR состоит в том, чтобы в программе не могло появиться два или более
Комментарии:
Добавить комментарий
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent