Linux Man на русском

  User    Syst    Libr    Device    Files    Other    Admin  



   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. Это может создавать гейзенбаг, который исчезает при включении отладки.