- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试找到一种使枚举“无符号”的方法。
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/
我是一名优秀的程序员,十分优秀!