Директива $B компилятора Delphi сокращаются ли вычисления при операциях or или and.
- {$B-}
- {$B+}
Директива компилятора $B говорит Delphi, продолжить ли вычисление многоаргументного булева выражения или нет, когда результат заранее известен.
{$B-} (значение по умолчанию) означает не продолжать, {$B+} означает продолжать проверку
Например, по умолчанию, с выражением:
expr1 and expr2
expr2 не будет вычисляться, если expr1 является ложным. С {$B+}, проверка продолжилась бы.
Пример иллюстрирует нормальное использование значения по умолчанию.
Примечания.
$B эквивалентна $BoolEval.
Эта директива может использоваться в пределах вашего кода множество раз.
$B- является значением по умолчанию
Директива компилятора $B: Проверка содержания строки
var
FullString, EmptyString : string;
begin
FullString := 'Fred';
EmptyString := '';
// Выключение полной проверки
{$B-}
// Проверка 4-го символа каждой строки
if (Length(FullString) >= 4) and (FullString[4] = 'd')
then ShowMessage('4-ый символ FullString - d')
else ShowMessage('4-ый символ FullString НЕ d');
if (Length(EmptyString) >= 4) and (EmptyString[4] = 'd')
then ShowMessage('4-ый символ EmptyString - d')
else ShowMessage('4-ый символ EmptyString НЕ d');
// Включение полной проверки
{$B+}
// Проверка 4-го символа каждой строки
if (Length(FullString) >= 4) and (FullString[4] = 'd')
then ShowMessage('4-ый символ FullString - d')
else ShowMessage('4-ый символ FullString НЕ d');
// Теперь мы должны защитить код от ошибок
try
if (Length(EmptyString) >= 4) and (EmptyString[4] = 'd')
then ShowMessage('4-ый символ EmptyString - d')
else ShowMessage('4-ый символ EmptyString НЕ d');
except
on E : EAccessViolation do
ShowMessage(E.Message);
end;
end;
Результат
Следующее типично для вывода вышеупомянутого кода:
4-ый символ FullString - d
4-ый символ EmptyString НЕ d
4-ый символ FullString - d
Access violation at address 00442196 in module 'PROJECT1.EXE'.
Read of address FFFFFFFF
Похожие функции, процедуры и команды
$BoolEval — сокращаются ли вычисления при операциях or или and.
And — булев and или поразрядный and двух аргументов.
If — начинает условное выражение, чтобы решить, что делать далее.
Or — булевская or или поразрядная or двух аргументов.
