AUTOSAR C++14 Rule M8-5-2
Braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures.
説明
ルール定義
Braces shall be used to indicate and match the structure in the non-zero 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 {}; //CompliantPolyspace 実装
入れ子にされた構造体が含まれる配列、共用体、または 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-compliantPolyspace は、標準テンプレート ライブラリ (STL) によって実装されたコンテナーに対し、このルールの違反を報告しません。
配列または構造体をゼロ初期化する場合は、最初の要素のみをゼロまたは NULL に初期化します。配列または構造体を部分的に非ゼロの値に初期化し、オブジェクトのそれ以外の部分については暗黙的なゼロ初期化に依存した場合、違反が発生します。たとえば、このコードでは部分的な初期化が違反として報告されます。
int16_t array[5] = {1,2,3}; //Noncompliant
int8_t map[2][2] = {{},{1,1}}; //Noncompliantトラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 宣言子 |
| カテゴリ: Required、Automated |