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

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

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

Нет никакого способа, которым результат мог бы быть неопределенным, так как Abort бросает EAbort,

Я старался:

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам