我在我的程序中使用了以下代码,在运行PC-Lint时会抛出以下错误: 此行有多个标记 - (lint:46)字段类型应为int,unsigned int或signed int [MISRA 2004 Rule 6.4,required] - (lint:960)违反MISRA 2004要求规则6.4,位字段必须明确签名为int或 unsigned int
typedef struct{
boolean ch8 :1;
boolean Ch7 :1;
boolean Ch6 :1;
boolean Ch5 :1;
boolean Ch4 :1;
boolean Ch3 :1;
boolean Ch2 :1;
boolean Ch1 :1;
} Channel;
有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:2)
你必须这样做:
typedef struct{
unsigned int ch8 :1;
unsigned int Ch7 :1;
unsigned int Ch6 :1;
unsigned int Ch5 :1;
unsigned int Ch4 :1;
unsigned int Ch3 :1;
unsigned int Ch2 :1;
unsigned int Ch1 :1;
} Channel;
bitfield接受的唯一类型是整数类型。
答案 1 :(得分:0)
MISRA-C:2004与C:90兼容,没有boolean
类型。
完全符合要求的位字段必须为unsigned int
或signed int
或者,您可以记录偏差(到规则1.1)以允许使用C99布尔类型 - 基本原理很简单,因为相应的MISRA C:2012规则(R 6.1)允许使用布尔值字段。
[请注意资料免责声明]