メインコンテンツ

MISRA C++:2023 Rule 6.7.1

Local variables shall not have static storage duration

R2024b 以降

説明

ルール定義

Local variables shall not have static storage duration. 1

根拠

複数のスレッドまたは関数が、static ストレージ期間を持つオブジェクトに同時にアクセスできます。複数の関数でローカル オブジェクトへのアクセスを共有すると、複数の関数が同じオブジェクトの読み取りまたは書き込みを行い、データ レースおよび未定義の動作につながる可能性があります。

このルールは const オブジェクトまたは constexpr オブジェクトには適用されません。

Polyspace 実装

static キーワードを使用してローカル オブジェクトまたはローカル無名共用体が宣言されている場合、Polyspace® はこのルールの違反を報告します。

例外として、このキーワードを使用してローカルの const および constexpr オブジェクトが宣言されている場合、Polyspace はこのルールの違反を報告しません。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

この例では、static キーワードを使用してローカル オブジェクトを宣言した場合、Polyspace がこのルールの違反を報告します。

int GLOBAL_COUNTER = 0;      // Compliant- static global object

class myClass
{
	static myClass &create() //static local function
	{
		static myClass app;   //Noncompliant
		return app;
	}
};

int myFunc(myClass a)
{
	int iterator = 0;          // Compliant
	static int static_counter = 0;   // Noncompliant
	static constexpr float PI = 3.1416;  // Compliant by exception- constexpr
	//...
}

例外として、static ストレージを持つ constexpr ローカル オブジェクトはこのルールの違反になりません。

チェック情報

グループ: 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.