1.2.5. $C или $ASSERTIONS : Поддержка формальных утверждений

Вверх  Предыдущий  Следующий

Переключатель {$ASSERTIONS} определяет, нужно ли операторы формальных утверждений компилировать в двоичный код. Если переключатель включен, то

Assert(BooleanExpression, AssertMessage);

будет компилироваться в двоичный код. Если BooleanExpression равно False, то RTL будет проверять, установлена ли AssertErrorProc. Если она установлена, она будет вызвана с параметрами сообщения AssertMessage, именем файла, LineNumber и адресом. Если она не установлена, то генерируется ошибка времени выполнения 227.

AssertErrorProc определена как

Type
  TAssertErrorProc=procedure(Const msg, fname : String;
                            lineno, erroraddr : Longint);
Var
  AssertErrorProc = TassertErrorProc;

Она может быть использована, в основном, для отладки. Модуль system устанавливает AssertErrorProc для обработчика, который отображает сообщение на stderr и просто выходит с ошибкой времени выполнения 227. Модуль sysutils отлавливает ошибку времени выполнения 227 и генерирует исключение EAssertionFailed.