gpt4 book ai didi

c - 运算符 '++' 的未经允许的操作数 [MISRA 2012 规则 10.1,必需]

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:23 26 4
gpt4 key购买 nike

我正在尝试修复其他人编写的模块的 Misra 警告。我观察到 ++ 操作正在 enum 上使用。

我提到了 SE question谈论同一个话题。我该如何解决这个错误?我是否需要建议模块所有者更改实现?

#include <stdio.h>

typedef enum
{
COMPARE = 0,
INCONSISTENT = 10,
WRITE,
READ,
FINISHED
}TestsType;

static TestsType CurrentTest;

void fun1(void)
{

if(READ != CurrentTest)
{

CurrentTest++;
}
else
{
CurrentTest = FINISHED;
}
}

int main(void) {
// your code goes here

CurrentTest = COMPARE;
fun1();
printf("%d", CurrentTest);

return 0;
}

我故意在代码中保留这样的 enum 以了解任何影响。但是,在实际代码中,它如下所示。

typedef enum
{
COMPARE,
INCONSISTENT,
WRITE,
READ,
FINISHED
}TestsType;

最佳答案

增加枚举是错误的!

枚举被添加到语言中作为许多常量的#define 的更好替代,并且在其他方​​面被认为是整数(即整数的常量数组)。要强制执行更多内容,需要运行时检查。

由于枚举值不必是连续的,因此当它们被视为整数时,增加它们是没有意义的。如果编译器允许它,它认为它正在递增一个 int,这可能意味着您的值之后不对应于枚举中的任何值。

所以我的建议是“不要这样做”,即使特定的编译器允许您这样做。将其重写为明确的内容。

如果你想在由连续整数表示的特定状态范围内循环,你可以使用枚举,但前提是你使它的值也连续。对解释解释不要修补的定义提出很多警告。然后递增表示状态的 int,然后可以安全地将其与枚举进行比较。

关于c - 运算符 '++' 的未经允许的操作数 [MISRA 2012 规则 10.1,必需],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57868745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com