You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于MISRA C 2012规则18.8违规的整改建议咨询

MISRA C 2012规则18.8违规整改建议

问题分析

你的代码触发MISRA C 2012规则18.8,核心原因是:枚举常量HIGH不属于MISRA定义的整数常量表达式,而规则18.8要求数组大小必须是编译期可确定的整数常量表达式,不能依赖枚举这类非严格常量表达式定义数组大小。

整改方案

方案1:使用#define定义数组大小常量

宏是预处理器层面的常量,属于标准的整数常量表达式,完全符合MISRA要求:

#define LOW 0U
#define HIGH 2U

int main(void) {
    unsigned int A[HIGH] = {2U, 3U};
}

方案2:保留枚举但显式使用整数常量初始化数组

如果需要保留枚举类型,可直接使用对应整数值作为数组大小:

typedef enum NUMBER {
    LOW = 0,
    HIGH = 2
} NUMBER;

int main(void) {
    unsigned int A[2U] = {2U, 3U};
}

方案3:使用const整数常量(需确认编译器支持)

部分编译器支持const限定的整数作为数组大小的常量表达式,写法如下:

typedef enum NUMBER {
    LOW = 0,
    HIGH = 2
} NUMBER;

const unsigned int ARRAY_SIZE = HIGH;

int main(void) {
    unsigned int A[ARRAY_SIZE] = {2U, 3U};
}

注意:此方案需确保编译器将const变量视为编译期常量,部分严格遵循C标准的编译器可能不支持,优先推荐方案1。

内容的提问来源于stack exchange,提问作者Omar Messari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:20:24