gpt4 book ai didi

c - 有没有办法在 C90 标准中使枚举无符号? (符合 MISRA-C 2004)

转载 作者:太空狗 更新时间:2023-10-29 15:43:20 25 4
gpt4 key购买 nike

我正在尝试找到一种使枚举“无符号”的方法。

enum{
x1 = 0,
x2,
x3
};
uint8_t = x2; /* <--- PC-LINT MISRA-C 2004 will complain about mixing signed and unsigned here */

当然,我可以添加类型转换来消除错误,这既耗时又容易出错。

uint8_t = (uint8_t)x2; /* This works, but is a lot of extra work over the course of 1000s of lines of code*/

那么,有没有办法使 MISRA-C 2004 喜欢的特定枚举未签名?

最佳答案

没有标准的 C 方法来控制为 enum 选择的类型。有时您可以通过特定于实现的方式来执行此操作,例如通过向枚举中添加一个值来强制类型为无符号:

enum {
x1,
x2,
x3,
giant_one_for_forcing_unsigned = 0x80000000;
};

但这甚至不是标准 C(因为提供的值不适合 int)。不幸的是,你很不走运。这是标准中的相关部分:

6.7.2.2 Enumeration specifiers, paragraph 4

Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type. The choice of type is implementation-defined, but shall be capable of representing the values of all the members of the enumeration. The enumerated type is incomplete until immediately after the } that terminates the list of enumerator declarations, and complete thereafter.

你最好使用 #define 而不是 enum 来制作你的常量:

#define x1 0U
#define x2 1U
#define x3 2U

uint8_t x = x2;

关于c - 有没有办法在 C90 标准中使枚举无符号? (符合 MISRA-C 2004),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635833/

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