Как я могу временно отключить предупреждение "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.
Ответы
Ответ 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, и он прекращает блеять.