変数のシャドウイング
入れ子にされたスコープで変数が同じ名前の別の変数を隠す
説明
この欠陥は、変数が同じ名前の別の変数を外側のスコープ内に隠している場合に発生します。
たとえば、ローカル変数の名前がグローバル変数と同じ名前である場合、ローカル変数はその有効期間の間、グローバル変数を隠します。
Polyspace® は、構造体バインディングの _
という名前の変数について欠陥を報告しません。多くの場合、この名前の変数はプレースホルダーです。
リスク
内側のスコープと外側のスコープに同じ名前の 2 つの変数が存在する場合、その変数名を参照すると、内側のスコープの変数が使用されます。しかし、開発者またはコード レビュー担当者は、外側のスコープの変数が使用されるという誤った想定をする可能性があります。
修正方法
修正方法は欠陥の根本原因によって異なります。たとえば、関数をリファクタリングして、ローカルの静的変数をグローバル変数の代わりに使用するとします。この場合、グローバル変数は冗長であり、その宣言を削除できます。または、グローバル変数が他の場所で使用されているか不明な場合、ローカルの静的変数の名前とその関数内のすべての参照を変更できます。
シャドウイングが意図したもので、問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
例
結果情報
グループ: データ フロー |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: VAR_SHADOWING |
影響度: Low |