Если макрос
NDEBUG
был определен в момент последнего включения
<assert.h>
то макрос
assert()
не создает никакого кода, и соответственно вообще ничего не делает.
Иначе, макрос
assert()
выводит на стандартный вывод сообщение об ошибке вызовом
abort()
и прекращает работу программы, если утверждение
expression
ложно (т.е. при сравнении равно нулю).
Целью этого макроса является помощь программисту в обнаружении
ошибок в его программах. Сообщения типа
"assertion failed in file foo.c, function do_bar(), line 1287"
не смогут помочь пользователю ничем.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Нет возвращаемого значения.
СООТВЕТСТВИЕ СТАНДАРТАМ
ISO9899 (ANSI C). В стандарте 1990 года
expression
была переменной типа
int,
и поведение функции было непредсказуемо, если появлялись другие типы данных;
но в стандарте 1999 года указано, что переменная должна быть любого скалярного типа.
НАЙДЕННЫЕ ОШИБКИ
assert()
реализован как макрос. Если выражение expression выполняет какие-то действия,
то поведение программы будте различным в зависимости от
NDEBUG.