assert - прекращает работу программы при ложном утверждении
assert(3)
прекращает работу программы при ложном утверждении
ОБЗОР
#include <assert.h>
void assert(scalar expression);
ОПИСАНИЕ
Если на момент последнего включения
<assert.h> был определён
макрос
NDEBUG, то для макроса
assert() не создаётся никакого кода и,
соответственно, он вообще ничего не делает. В противном случае, макрос
assert() выводит в стандартный поток ошибок сообщение об ошибке и
прекращает работу программы вызовом
abort(3), если значение
expression
ложно (т. е. при сравнении равно нулю).
Данный макрос помогает программисту находить ошибки в своих программах. Для
пользователя, сообщения типа «assertion failed in file foo.c, function
do_bar(), line 1287» бесполезны.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Ничего не возвращается.
АТРИБУТЫ
Описание терминов данного раздела смотрите в
attributes(7).
Интерфейс Атрибут Значение
assert()
безвредность в потоках: безвредно (MT-Safe)
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C89, C99. В стандарте C89 указано, что значение
expression должно иметь тип
int, и поведение функции непредсказуемо,
если это не так; согласно стандарту C99, переменная может быть любого
скалярного типа.
ДЕФЕКТЫ
Функция
assert() реализована в виде макроса. Если проверка выражения
приводит к побочным изменениям, то поведение программы будет различным в
зависимости от наличия
NDEBUG. Это может создавать гейзенбаг, который
исчезает при включении отладки.