メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C++:2008 Rule 8-5-2

Braces shall be used to indicate and match the structure in the nonzero initialization of arrays and structures.

説明

ルール定義

配列および構造体の非ゼロによる初期化では、構造を指示して一致させるために中かっこが使用されます。

根拠

初期化子リストで入れ子にされた中かっこを使用して、配列、共用体、構造体に含まれる入れ子にされたオブジェクトの構造体と一致させると、複雑なデータ型が初期化される順序を考慮するよう促されるため、より読みやすいコードになります。たとえば、ex1 の初期化で入れ子にされた中かっこを使用すると、struct ex1 に含まれる入れ子にされた配列 arr1 および arr2 がどのように初期化されるのかを確認しやすくなります。

struct Example
{
    int num;
    int arr1[2];
    int arr2[3];
};

//....
struct Example ex1 {1, {2, 3}, {4, 5, 6}}; //Compliant

たとえば次のように、入れ子にされた構造体が含まれる、最上位にある配列、共用体、または struct のゼロ初期化を行う場合、このルールは入れ子にされた中かっこの使用を要件としません。

struct Example ex1 {}; //Compliant

Polyspace 実装

入れ子にされた構造体が含まれる配列、共用体、または struct の非ゼロ初期化を行う場合、入れ子にされた構造体を反映するために入れ子にされた中かっこを使用していなければ、Polyspace® は初期化子リストの最初の入れ子にされた構造体に含まれる最初の要素にフラグを設定します。たとえば、このコード スニペットでは、Polyspace は数値 2 にフラグを設定します。これが、struct ex1 に含まれる入れ子にされた構造体 arr1 の最初の要素に対応するためです。

struct Example
{
    int num;
    int arr1[2];
    int arr2[3];
};

//....
struct Example ex1 {1, 2, 3, 4, 5, 6}; // Non-compliant

Polyspace は、標準テンプレート ライブラリ (STL) によって実装されたコンテナーに対し、このルールの違反を報告しません。

トラブルシューティング

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

すべて展開する

char arr1[2][3] {'a', 'b', 'c', 'd', 'e', 'f'}; //Non-compliant
char arr2[2][3] {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; //Compliant
char arr_top_level[2][3] { }; //Compliant
char arr_sub_level[2][3] { {}, {'d', 'e', 'f'}}; //Non-compliant

この例では、2 次元配列 arr1 の初期化子リストが、この配列の入れ子にされた構造 (それぞれ 3 つの要素からなる 2 つの配列) を反映していません。したがって、この 2 次元配列は非準拠です。arr2 の初期化は、入れ子にされた中かっこを使用して配列の入れ子にされた構造を反映しているため、準拠しています。同様に、arr_top_level の初期化は、最上位にある配列のゼロ初期化を行うため、準拠しています。arr_sub_level の初期化は、配列の一部のみをゼロ初期化する一方、配列の他の部分のすべての要素は明示的に初期化するため、非準拠です。

チェック情報

グループ: Declarators
カテゴリ: 必要

バージョン履歴

R2013b で導入

すべて展開する