メインコンテンツ

MISRA C:2023 Rule 17.5

The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements

R2024a 以降

説明

ルール定義

The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements 1 .

根拠

ポインターの代わりに配列宣言子を関数パラメーターに使用する場合、必要とされる最小限の配列サイズを明示できるため、関数インターフェイスがわかりやすくなります。サイズを明示しない場合、必要とされるのは、関数が任意のサイズの配列を処理できることです。こうした場合、サイズの値は通常は関数の別のパラメーターであり、それ以外の場合は配列がセンチネル値で終了します。

ただし C では、配列サイズを指定したうえで、より小さいサイズの配列を渡すことが認められます。このルールにより、宣言したサイズより小さいサイズの配列を渡すことを防止します。

Polyspace 実装

特定のサイズの配列パラメーターで宣言された関数が、それよりもサイズが小さい配列を使用して呼び出される場合、ルール チェッカーは違反を報告します。次の点に注意してください。

  • サイズが指定された配列パラメーターが、1 つの関数に複数使用されている場合、それぞれのパラメーターの指定サイズよりも小さい配列を渡しても、違反が報告されるのは 1 回のみです。

  • 配列を関数に直接渡す場合に限り、チェッカーは違反を報告します。代わりに、配列を指すポインターを渡せば、チェッカーは違反を報告しません。

トラブルシューティング

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

すべて展開する

void func(int arr[4]);

int main() {
    int arrSmall[3] = {1,2,3};
    int arr[4] = {1,2,3,4};
    int arrLarge[5] ={1,2,3,4,5};
    
    func(arrSmall);      /* Non-compliant */
    func(arr);           /* Compliant */
    func(arrLarge);      /* Compliant */
    
    return 0;
}

この例では、サイズ 3 の arrSmall が、少なくとも 4 つの要素を必要とする func に渡されるため、ルールに違反します。

チェック情報

グループ: 関数
カテゴリ: 必要
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.