Не отвечает при компиляции этой функции? - PullRequest
6 голосов
/ 12 мая 2011

Я попытался с Delphi XE, и во время компиляции я получил сообщение «Не отвечает». Работает ли он на вашем компьютере или что-то не так с этой функцией?

function Test(const FileName: string;
  const Force: boolean = false): boolean;
var
  IsAllowed: boolean;
begin
  result := false;
  if FileExists(FileName) then
  begin
    try
      if (Force) then
      begin
        result := false;
        exit;
      end;
    finally
      if IsAllowed then
        DeleteFile(FileName);
    end;

    try
      result := true;
    except
      result := false;
    end;
  end;
end;

1 Ответ

11 голосов
/ 12 мая 2011

Он компилируется на моем компьютере.Хотя я получаю предупреждение, переменная W1036 'IsAllowed', возможно, не была инициализирована.

Обновление: я могу воспроизвести зависание, когда я включаю Windows в предложении использования. Подано в Quality Central: QC93806 .

program hang_test;

{$APPTYPE CONSOLE}

uses
  // Windows, // uncomment to include Windows -> hang on compile
  SysUtils;

function Test(const FileName: string; const Force: boolean = false): boolean;
  // your function here

begin
  try

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Это похоже на ошибку;вы должны сообщить об этом в Quality Central .

Обновление 2: минимальный регистр, в котором воспроизводимо зависает компилятор:

function HangCompiler: Boolean;
begin
  try
    Exit; // 1. exit from a try..finally
  finally
    DeleteFile(''); // 2. inlined function call in finally (include Windows to inline)
  end;
  // 3. try..except
  try
    Result := True;
  except
    Result := False;
  end;
end;
...