Delphi で「戻り値 … が未定義である可能性があります」に関する警告を無効にする方法は?

StackOverflow https://stackoverflow.com/questions/61418

  •  09-06-2019
  •  | 
  •  

質問

次の警告を表示する関数があります。

[DCC 警告] ファイル名.pas(6939):W1035 関数 'function' の戻り値が未定義である可能性があります

ただし、この関数はクリーンで小さく、既知の期待される戻り値を持っています。関数の最初のステートメントは次のとおりです。

Result := '';

呼び出されるローカル変数またはパラメータはありません Result どちらか。

この警告を削除するためにこのメソッドを囲むことができるプラグマのようなディレクティブはありますか?これは Delphi 2007 です。

残念ながら、この Delphi インストールのヘルプ システムが機能していないため、現在その警告に関するヘルプをポップアップ表示することができません。

私に何ができるかを頭から知っている人はいますか?

役に立ちましたか?

解決

警告を解決するためにすべてのことを実行しましたか?私たちが確認できるようにコードを投稿していただけますか?

次の方法でローカルで警告をオフにすることができます。

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}

他のヒント

このユニットのコードを見たいかどうかわかりません...結局、エラーは行 6939 で発生します...おそらく内部コンパイラ テーブルを超えているのではないでしょうか?

Delphi に何らかのバグがあるようです。この投稿を読んでください。最後のコメントは、あなたが入手したものである可能性のある他のバグレポートへのリンクです。

http://qc.codegear.com/wc/qcmain.aspx?d=8144

あなたが探しているのは {$WARN NO_RETVAL OFF} ですが、私は一般的に、なぜこのようなことが起こるのかを知りたいと思っています。別の形式に設定して、それが役立つかどうかを確認することを検討してください。

Exit のようなフローを変更するコマンドはありますか?例外などを直接発生させますか?case ステートメントの最後に、Result に値を設定する else がありますか?

これらの要素を調整して、警告が表示されなくなるかどうかを確認してください。

これに対する適切な答えを得るには、コードを投稿する必要があります。一般に、Delphi コンパイラは、結果が定義されない可能性のあるコード パスがある場合にこの警告を出します。場合によっては、そのコード パスが明らかではないことがあります。

少なくとも Delphi4 以降、Delphi コンパイラにはこのようなバグがあります。関数のパラメータ (Self と Result を含む) とローカル変数の数の合計が 31 を超えると、問題が発生します。たとえば、W1035 警告を書き込むことができます (結果は未定義になる可能性があります)。使用されていない変数を見逃す可能性があります。このプロジェクトを試してみてください。

program TestCompilerProblems;

procedure Proc;
var
  a01, a02, a03, a04, a05, a06, a07, a08, a09, a10,
  a11, a12, a13, a14, a15, a16, a17, a18, a19, a20,
  a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
  a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer;
begin
end;

begin
  Proc;
end.

ヒントは 40 ではなく 31 になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top