我正在尝试找到一种使枚举“无符号”的方法。
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 枚举说明符,第 4 段
每个枚举类型应兼容char
、有符号整数类型或无符号整数类型。类型的选择是实现定义的,但应能够表示枚举的所有成员的值。枚举类型在紧接着之前是不完整的}
终止枚举器声明列表,然后完成。
你可能最好使用#define
而不是enum
使你的常数:
#define x1 0U
#define x2 1U
#define x3 2U
uint8_t x = x2;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)