主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

MISRA C:2012 Rule 9.3

Arrays shall not be partially initialized

描述

规则定义

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 类别:可读性

版本历史记录

在 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.