メインコンテンツ

MISRA C:2023 Rule 9.4

An element of an object shall not be initialized more than once

R2024a 以降

説明

ルール定義

An element of an object shall not be initialized more than once 1 .

根拠

指示付きの初期化子により、配列などオブジェクトの要素を任意の順序で明示的に初期化できます。しかし、指示付きの初期化子を使用すると、同じ要素を誤って 2 回初期化し、最初の初期化を上書きする可能性があります。

トラブルシューティング

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

すべて展開する

void func(void) {
    int a[5] = {-2,-1,0,1,2};               /* Compliant */
    int b[5] = {[0]=-2, [1]=-1, [2]=0, [3]=1, [4]=2}; /* Compliant */
    int c[5] = {[0]=-2, [1]=-1, [1]=0, [3]=1, [4]=2}; /* Non-compliant */

}

この例では、配列要素 c[1] が指示付きの初期化子を使用して 2 回初期化される場合、ルールに違反します。

struct myStruct {
    int a;
    int b;
    int c;
    int d;
};

void func(void) {
    struct myStruct struct1 = {-4,-2,2,4}; /* Compliant */
    struct myStruct struct2 = {.a=-4, .b=-2, .c=2, .d=4}; /* Compliant */
    struct myStruct struct3 = {.a=-4, .b=-2, .b=2, .d=4}; /* Non-compliant */
}

この例では、struct3.b が指示付きの初期化子を使用して 2 回初期化される場合、ルールに違反します。

チェック情報

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

バージョン履歴

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.