我有一个名为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分配位字段?
我有一个名为Character的typedef结构。 typedef struct {unsigned int a:1;无符号整数b:1; unsigned int c:1; unsigned int d:1;无符号整数o:1; unsigned int p:...
由于这个原因,我发现MISRA C过于复杂。无论如何,您并不是说要直接分配它。在这种情况下,您可以采取以下措施:
如果需要,表达式pData[0] >> 5
中的两个操作数都将是promoted至int
(对于pData[0]
将会发生)。