MISRA C++:2023 Rule 6.7.2
説明
ルール定義
Global variables shall not be used. 1
根拠
グローバル変数とは、次のようなものです。
グローバル名前空間を含め
namespaceスコープ内で宣言されている変数。クラスの
staticデータ メンバー。
このような変数のリンクに応じて、ソース ファイル内またはプログラム内の任意の位置から、この変数の読み取りまたは書き込みが可能です。このように非ローカル オブジェクトの利用可能性が高いことで、さまざまな問題が生じる可能性があります。
多数の関数とエンティティがこれらのグローバル変数の読み取りや書き込みを行えるため、それらの交互作用が予測不可能になります。
複数の関数がこれらのグローバル変数に同時にアクセスすることができるため、同時実行プログラムでデータ競合によって未定義の動作が発生するリスクがあります。
グローバル変数の初期化順序は C++ 標準で完全には指定されていないことから、グローバル変数が動的に初期化された場合に変数の値が予測不可能になる可能性があります。
このルールに違反しない次の変数を除き、グローバル変数の使用は避けてください。
constexpr変数静的な初期化によって初期化される
const変数ラムダ キャプチャのないラムダを保持する変数
Polyspace 実装
次のいずれかのオブジェクトを宣言すると、Polyspace® はこのルールの違反を報告します。
constとconstexprのいずれでもないグローバル変数または名前空間スコープ変数動的に初期化された
constグローバル変数または名前空間スコープ変数staticクラス メンバー
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Basic Concepts |
| カテゴリ: Required |
バージョン履歴
R2024b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.