12

コンパイラがこの警告について間違っていると思うので、コードで特定の警告(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}が、それはここで意図されていることではありません。

編集:私はこれを#89744としてQCしました。

4

3 に答える 3

13

この警告をグローバルに無効にすることはできませんが、を使用し{$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}
于 2010-11-17T13:10:58.867 に答える
9

現在、Delphiコンパイラを利用できませんが、コードを再配置して削除するif..elseと、警告が消える可能性があります。

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

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

「戻り値…が未定義である可能性があります」に関するDelphiの警告を無効にする方法も参照してください。。

于 2010-11-17T13:06:21.770 に答える
1

きちんとしたトリックを使用して、コンパイラーをだますことができます。ライブラリ関数を次のように定義します。

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

次に、関数を次のように記述できます。

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

コンパイラーは、これがvarパラメーターであり、ブリーチを停止するため、Resultに書き込んだと見なします。

于 2010-11-17T20:28:06.083 に答える