メインコンテンツ

MISRA C:2012 Rule 8.11

When an array with external linkage is declared, its size should be explicitly specified

説明

ルール定義

When an array with external linkage is declared, its size should be explicitly specified 1 .

根拠

不完全な型をもつ配列を宣言してその要素にアクセスするのは可能ですが、配列のサイズを明示的に記述する方が安全です。各宣言のサイズの情報を記述すると、コード レビュー担当者が複数の宣言の整合性をチェックできるようになります。サイズ情報があれば、静的解析ツールで複数のユニットを解析しなくても配列範囲解析を実行することができます。

Polyspace 実装

ルール チェッカーは、宣言で明示的に配列サイズが指定されていない場合に、extern 指定子を使用して宣言された配列にフラグを設定します。

レポート内の追加のメッセージ

Size of array array_name should be explicitly stated.When an array with external linkage is declared, its size should be explicitly specified.

トラブルシューティング

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

すべて展開する

#include <stdint.h>

extern int32_t array1[10];    /*  Compliant  */
extern int32_t array2[];      /*  Non-compliant  */

この例では、array1array2 の 2 つの配列が宣言されています。array1 は外部リンク (extern キーワード) を含み、サイズは 10 です。array2 も外部リンクを含みますが、サイズは指定されていません。外部リンクを含む配列にはサイズを明示的に指定しなければならないため、array2 は準拠していません。

チェック情報

グループ: 宣言と定義
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

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.