【发布时间】:2018-09-21 06:19:30
【问题描述】:
假设我有
typedef struct {
unsigned short bar : 1;
} foo_bf;
typedef union {
unsigned short val;
foo_bf bf;
} foo_t;
我如何正确地从一个类型(例如 uint16_t)给这个位域赋值?
uint16_t myValue = 1;
foo_t foo;
foo.bf.bar = myValue
运行 PC-Lint,这会变成 MISRA 错误: 表达式分配给更窄或不同的基本类型。
我试图限制使用的位数,但没有成功。
foo.bf.bar = (myValue 0x1U)
如果我必须使用 uint16_t 值作为原点,是否有机会使其符合 MISRA?
【问题讨论】:
-
将
myValue转换为_Bool?如果这不起作用,您可能不得不忍受警告。 -
if (myValue) myFoo.bar = 1; else myFoo.bar = 0;假设为foo_bf myFoo,垃圾邮件foo_t -
根据错误所指的较窄类型,
foo.bf.bar = (unsigned short) myValue;可能就足够了
标签: c bit-fields misra pc-lint