我在程序中使用了以下代码,在运行PC Lint时,它会引发以下错误:这一行有多个标记-(lint:46)字段类型应为int、unsigned int或signed int[MIRA 2004 Rule 6.4,required]-(lint:960)违反MISRA 2004必需规则6.4,位字段必须显式签名为int或无符号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;
有人能告诉我怎么修吗?
你必须这样做:
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;
位字段只能接受整数类型。
MISRA-C:2004与没有boolean
类型的C:90兼容。
为了完全兼容,比特字段必须是unsigned int
或signed int
或者,您可以记录偏差(根据规则1.1),以允许使用C99布尔类型-原理很简单,因为相应的MISRA C:2012规则(R 6.1)允许对位字段使用布尔类型。
[请注意配置文件免责声明]