【发布时间】:2020-01-27 09:36:27
【问题描述】:
我有一个名为 Character 的 typedef struct。
typedef struct {
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
unsigned int d : 1;
unsigned int o : 1;
unsigned int p : 1;
unsigned int q : 1;
unsigned int x : 1;
} Character;
static Character tempChar;
void writeVar(const uint8_t *pData)
{
tempChar.a = pData[0] >> 5;
...
}
当我尝试将 uin8_t 变量(值为 0 或 1)分配给这些位域之一时,我违反了 MISRA 规则 10.6,该规则指出:
复合表达式的值不应分配给 具有更广泛基本类型的对象
有没有办法在不违反 MISRA C 的情况下将位域分配给 uint8_t?
【问题讨论】:
-
你是怎么得到这个警告的?如何编译代码?
-
我正在使用一个工具来进行静态分析。我必须遵守 MISRA C。
-
你试过
tempChar.a = (uint8_t)(pData[0] >> 5);吗? -
是的,我做到了。它没有帮助。
-
尽量避免
int促销:tempChar.a = ((unsigned)pData[0]) >> 5;
标签: c bit-fields misra uint8t