AUTOSAR C++14 Rule M0-1-4
A project shall not contain non-volatile POD variables having only one use
説明
ルール定義
A project shall not contain non-volatile POD variables having only one use.
根拠
非 volatile 変数を Plain Old Data 型 (int や double など) と一緒に "1 回だけ" 使用する場合は、その変数を定数リテラルで置き換えることができます。変数の使用方法が、その変数を複数回使用することを示していたため、コード内でプログラミング エラーが発生した可能性があります。非 volatile 変数の他の使用を省略していたか、意図される使用場所で誤って他の変数を使用した可能性があります。
Polyspace 実装
チェッカーは、一度だけ使用される関数スコープ (ローカルに静的) とファイル スコープを持つローカル変数と静的変数にフラグを設定します。チェッカーは、extern 指定子のない const 修飾付きグローバル変数をファイル スコープを持つ静的変数と見なします。
チェッカーは、以下のユース ケースを非 volatile 変数の 1 回の使用としてカウントします。
定数リテラルまたは関数の戻り値を使用した明示的な初期化
割り当て
読み取り操作などの変数への参照
ポインターへの変数アドレスの割り当て
ポインターに変数アドレスが割り当てられている場合、チェッカーは、そのポインターが後でデリファレンスされる可能性があると仮定して、その変数にフラグを設定しません。
一部のオブジェクトは、セマンティクスによって 1 回だけ使用されるように設計されています。Polyspace® は、このようなオブジェクトの 1 回の使用にフラグを設定しません。
lock_guardscoped_lockshared_lockunique_lockthreadfutureshared_future
前述のリスト内のオブジェクトと同様の機能を提供する非標準オブジェクトを使用する場合は、Polyspace が非標準オブジェクトの 1 回の使用にフラグを設定することがあります。コメントを使用することによって、この 1 回の使用を正当化します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 言語に依存しない問題 |
| カテゴリ: Required、Automated |