変換において修飾子を削除
変数修飾子が変換中に失われる
説明
このチェッカーは、既定の Polyspace® as You Code 解析では非アクティブにされます。Polyspace as You Code 解析で非アクティブにされるチェッカー (Polyspace Access)を参照してください。
この欠陥は、ポインターの変換中に、あるポインターには修飾子が含まれているが、別のポインターには修飾子が含まれていない場合に発生します。たとえば、const int* から int* に変換する場合、変換によって const 修飾子が削除されます。
この欠陥は C のプロジェクトのみに当てはまります。
リスク
ポインター宣言における const または volatile などの修飾子を考えます。
const int* ptr;
const または volatile であることを意味します。これらの修飾子はコンパイラに対する命令として機能します。たとえば、const オブジェクトはコード内で変更されることを想定しておらず、volatile オブジェクトはコンパイラによって最適化されることを想定していません。2 番目のポインターが同じオブジェクトを指しているが、同じ修飾子を使用していない場合、最初のポインターの修飾子は無効になります。たとえば、const int* ポインターと int* ポインターが同じオブジェクトを指している場合、2 番目のポインターを通じてオブジェクトを変更し、最初のポインターの const 修飾子による暗黙的なコントラクトに違反する可能性があります。
修正方法
あるポインターから別のポインターへの変換を意図する場合は、両方のポインターを同じ修飾子を使用して宣言します。
例
結果情報
| グループ: プログラミング |
| 言語: C |
| 既定値: オフ |
コマンド ライン構文: QUALIFIER_MISMATCH |
| 影響度: Low |
バージョン履歴
R2013b で導入