メインコンテンツ

MISRA C++:2008 Rule 3-1-3

When an array is declared, its size shall either be stated explicitly or defined implicitly by initialization.

説明

ルール定義

When an array is declared, its size shall either be stated explicitly or defined implicitly by initialization. 1

根拠

配列のサイズを指定せずに外部リンクを含む配列を宣言してから、その配列の要素にアクセスしようとすると、範囲外の配列インデックスのエラーが発生する可能性があります。このようなエラーが発生する可能性を抑えるには、配列の宣言に配列のサイズを指定します。

Polyspace 実装

以下のすべての条件に該当する場合、Polyspace® はこのルールの違反を報告します。

  • extern 配列を宣言している。

  • 配列が初期化されていない。

  • 配列の要素の数が明示的に示されていない。

トラブルシューティング

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

すべて展開する

int array[10];  
extern int array2[]; //Noncompliant
int array3[]= {0,1,2};
extern int array4[10];

array2 の宣言で配列サイズが指定されていません。

この例では、配列 first_scores のサイズが初期化で暗黙的に定義されています。配列 second_scores のサイズは、[] 演算子を使用して明示的に定義されています。Polyspace はルールの違反を報告しません。

配列 mean_scores のサイズが暗黙的にも明示的にも宣言されていません。Polyspace は違反を報告します。

int first_scores [] = { 89, 100, 84, 48,  93 }; //Compliant
int second_scores [5]; //Compliant
extern int mean_scores []; //Noncompliant

int * test_mean (int factor) {
    for (int i = 0; i < 5; ++i){
        second_scores[i] = i * factor;
        mean_scores[i] = (first_scores[i] + second_scores[i]) / 2;
    }
    return mean_scores;
}

チェック情報

グループ: Basic Concepts
カテゴリ: 必要

バージョン履歴

R2013b で導入


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.