主要内容

MISRA C:2023 Rule 9.4

An element of an object shall not be initialized more than once

自 R2024a 起

描述

规则定义

An element of an object shall not be initialized more than once 1 .

理由

指定的初始化函数允许以任意顺序显式初始化对象(例如数组)的元素。然而,使用指定的初始化函数时,可能会无意中对同一元素进行两次初始化,从而覆盖第一次的初始化。

故障排除

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

示例

全部展开

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

}

在此示例中,当使用指定的初始化函数将数组元素 c[1] 初始化两次时便违反了该规则。

struct myStruct {
    int a;
    int b;
    int c;
    int d;
};

void func(void) {
    struct myStruct struct1 = {-4,-2,2,4}; /* Compliant */
    struct myStruct struct2 = {.a=-4, .b=-2, .c=2, .d=4}; /* Compliant */
    struct myStruct struct3 = {.a=-4, .b=-2, .b=2, .d=4}; /* Non-compliant */
}

在此示例中,当使用指定的初始化函数将 struct3.b 初始化两次时便违反了该规则。

检查信息

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