Остерегайтесь использования команды Exit
во встроенных функциях! Я здесь использовал Delphi XE3.
Симптом
В определенных обстоятельствах, когда выполняется вызов встроенной функции, содержащей команду Exit
, и возвращаемое значение встроенной функции используется напрямую в WriteLn()
, компилятор сообщает сообщение об ошибке,
"dcc" завершился с кодом 1.
или, что еще хуже, IDE 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;
Вопросов
- Это ошибка компилятора?
- Если это ошибка, есть ли обходной путь для безопасного выхода из встроенной функции?
inline
не меняет того, чтоexit
означает. Проблема в том, что внутренняя антивирусная программа убивает IDE. - person David Heffernan   schedule 07.06.2015