Подтвердить что ты не робот

Как я могу временно отключить предупреждение "return value is be undefined"?

Я хочу отключить определенное предупреждение (W1035) в моем коде, так как я думаю, что компилятор ошибается в этом предупреждении:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;

Нет никакого способа получить результат undefined, так как Abort throws EAbort.

Я пробовал:

  • {$WARN 1035 Off}: По-видимому, это работает только для некоторых конкретных ошибок (см. Документация)
  • {$W-1035}: ничего не делает

Я знаю, что могу отключить предупреждение в глобальном масштабе в параметрах проекта или использовать {$WARNINGS OFF}, но это не то, что здесь предназначено.

Изменить: у меня теперь QC'ed это как # 89744.

4b9b3361

Ответ 1

вы не можете отключить это предупреждение глобально, но вы можете использовать {$WARN NO_RETVAL OFF} для локального отключения предупреждения.

{$WARN NO_RETVAL OFF}
function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;
{$WARN NO_RETVAL ON}

Ответ 2

У меня нет компилятора Delphi, доступного на данный момент, но переупорядочение кода для удаления if..else может привести к отключению предупреждения:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal <> mrOk then
    Abort;

  Result := TOption(rdgAction.EditValue);
end;

См. также Как отключить предупреждение в Delphi о "возвращаемом значении... может быть undefined" ?.

Ответ 3

Вы можете использовать опрятный трюк, чтобы обмануть компилятор. Определите библиотечную функцию следующим образом:

procedure Abort(var X);
begin
  SysUtils.Abort;
end;

Затем вы можете записать свою функцию как:

if ShowModal = mrOk then
  Result := TOption(rdgAction.EditValue)
else
  Abort(Result)

Компилятор считает, что вы написали в Result, так как это параметр var, и он прекращает блеять.