主要内容

MISRA C:2023 Rule 9.5

Where designated initializers are used to initialize an array object the size of the array shall be specified explicitly

自 R2024a 起

描述

规则定义

Where designated initializers are used to initialize an array object the size of the array shall be specified explicitly 1 .

理由

如果数组大小没有显式指定,则它由已初始化元素的最大索引确定。当使用较长的指定初始化函数时,可能无法立即看出哪个元素的索引最大。

故障排除

如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开

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

void display(int);

void main() {
    func(a,5);
    func(b,5);
    func(c,5);
}

void func(int* arr, int size) {
    for(int i=0; i<size; i++)
        display(arr[i]);
}

在此示例中,当使用指定初始化函数初始化数组 bc 但未指定数组大小时,会违反该规则。

检查信息

组:初始化
类别:必需
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.