主要内容

MISRA C:2023 Rule 9.3

Arrays shall not be partially initialized

自 R2024a 起

描述

规则定义

Arrays shall not be partially initialized 1 .

理由

为每个数组元素提供显式初始化可以清楚地表明每个元素都已被考虑到。

Polyspace 实现

如果数组在声明时只被部分初始化,则检查项会报告违反了此规则。此检查项允许使用简化形式 {0} 对所有值进行初始化,例如:

float dat2[3*3] = {0};

故障排除

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

示例

全部展开

void func(void) {
    int x[3] = {0,1,2};               /* Compliant */
    int y[3] = {0,1};                 /* Non-compliant */
    int z[3] = {0};                   /* Compliant - exception */
    int a[30] = {[1] = 1,[15]=1};     /* Compliant - exception */
    int b[30] = {[1] = 1, 1};         /* Non-compliant */
    char c[20] = "Hello World";       /* Compliant - exception */
}

在此示例中,当每个数组元素都被显式初始化时,不会违反该规则。

当数组的某些元素被隐式初始化时,就会违反该规则。例外情况包括下列项:

  • 初始化函数的形式为 {0},它会将所有元素初始化为零。

  • 数组初始化函数包含指定初始化函数。通常,您使用此方法进行稀疏初始化。

  • 数组使用字符串字面量进行初始化。

检查信息

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