メインコンテンツ

MISRA C:2023 Rule 9.2

The initializer for an aggregate or union shall be enclosed in braces

R2024a 以降

説明

ルール定義

The initializer for an aggregate or union shall be enclosed in braces 1 .

根拠

ルールはオブジェクトとサブオブジェクトの両方に適用されます。たとえば、配列を含む構造体を初期化するときに、構造体に割り当てられる値は中かっこで囲まなければなりません。これらの中かっこの中で、配列に割り当てされた値は別の中かっこのペアで囲まなければなりません。

初期化子を中かっこで囲むと、多次元配列や構造体の配列などの複雑なデータ構造を含むコードの明確さが向上します。

ヒント

サブオブジェクトでの入れ子にされた中かっこを回避するには、すべての値をゼロに設定する構文 {0} を使用します。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

void initialize(void) {
    int x[4][2] = {{0,0},{1,0},{0,1},{1,1}}; /* Compliant */
    int y[4][2] = {{0},{1,0},{0,1},{1,1}};   /* Compliant */
    int z[4][2] = {0};                       /* Compliant */
    int w[4][2] = {0,0,1,0,0,1,1,1};         /* Non-compliant */
}

この例では、以下の場合はルールに違反しません。

  • 配列の各行の初期化子が中かっこで囲まれている。

  • 構文 {0} がすべての要素をゼロに初期化している。

各行の初期化子を囲むために個別の中かっこのペアが使われていない場合、ルールに違反します。

チェック情報

グループ: 初期化
カテゴリ: 必要
AGC カテゴリ: Readability

バージョン履歴

R2024a で導入


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.