メインコンテンツ

MISRA C:2012 Rule 9.3

Arrays shall not be partially initialized

説明

ルール定義

Arrays shall not be partially initialized 1 .

根拠

各配列要素を明示的に初期化すると各要素が考慮されていることが明確になります。

Polyspace 実装

配列が宣言時に部分的に初期化されている場合、チェッカーはこのルールに対する違反を報告します。チェッカーは、次のような省略表記 {0} を使用したすべての値の初期化を許容します。

float dat2[3*3] = {0};

トラブルシューティング

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

すべて展開する

void func(void) {
    int x[3] = {0,1,2};               /* Compliant */
    int y[3] = {0,1};                 /* Non-compliant */
    int z[3] = {0};                   /* Compliant - exception */
    int a[30] = {[1] = 1,[15]=1};     /* Compliant - exception */
    int b[30] = {[1] = 1, 1};         /* Non-compliant */
    char c[20] = "Hello World";       /* Compliant - exception */
}

この例では、各配列要素が明示的に初期化されている場合、ルールに違反しません。

配列の一部の要素が暗黙的に初期化されている場合、ルールに違反します。以下の場合は例外です。

  • 初期化子がすべての要素をゼロに初期化する形式 {0} をもつ。

  • 配列初期化子が指示付きの初期化子 "のみ" で構成されている。通常、この方法はスパースの初期化に使用します。

  • 配列が文字列リテラルを使用して初期化されている。

チェック情報

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

バージョン履歴

R2014b で導入

すべて展開する


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.