Как временно отключить предупреждение «Возвращаемое значение может быть неопределенным»? - PullRequest
12 голосов
/ 17 ноября 2010

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

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

Результат никак не может быть неопределенным, поскольку Abort throws EAbort.

Я пытался:

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

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

Редактировать: Теперь я получил QC как # 89744 .

Ответы [ 3 ]

13 голосов
/ 17 ноября 2010

вы не можете отключить это предупреждение глобально, но вы можете использовать {$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}
9 голосов
/ 17 ноября 2010

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

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

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

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

1 голос
/ 17 ноября 2010

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

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

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

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

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

...