Остерегайтесь использования команды Exit
в встроенных функциях! Я использую Delphi XE3 здесь.
Симптом
При определенных обстоятельствах, когда вызов выполняется встроенной функцией, содержащей команду Exit
, а возвращаемое значение встроенной функции используется непосредственно в WriteLn()
, компилятор сообщает об ошибке,
"dcc" вышел с кодом 1.
или даже хуже, среда ID Delphi завершается без какого-либо подтверждения.
function ProcessNumber(const iNumber: Integer): Boolean; inline;
begin
if iNumber = 0 then begin
Result := False;
Exit;
end;
// some code here ...
Result := True;
end;
procedure Test;
begin
writeln( ProcessNumber(0) );
end;
begin
Test;
ReadLn;
end.
Однако, если возвращаемое значение встроенной функции сохраняется в переменной, а затем переменная используется в WriteLn()
, проблема не возникает.
procedure Test;
var
b: Boolean;
begin
b := ProcessNumber(0);
writeln(b);
end;
Вопросы
- Является ли это ошибкой компилятора?
- Если это ошибка, есть ли временное решение для безопасного выхода из встроенной функции?