Как я могу временно отключить «возвращаемое значение может быть неопределенным» предупреждением?
-
25-09-2019 - |
Вопрос
Я хочу отключить конкретное предупреждение (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'ed это сейчас как #89744.
Решение
Вы не можете отключить это предупреждение по всему миру, но вы можете использовать {$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)
Компилятор считает, что вы написали, чтобы привести, так как это параметр var, и он перестает блесть.