c-MISRA错误:字段类型应为int、unsigned int或signed int



我在程序中使用了以下代码,在运行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 intsigned int

或者,您可以记录偏差(根据规则1.1),以允许使用C99布尔类型-原理很简单,因为相应的MISRA C:2012规则(R 6.1)允许对位字段使用布尔类型。

[请注意配置文件免责声明]

最新更新