MISRA ERROR:字段类型应为int,unsigned int或signed int

时间:2014-11-01 08:49:06

标签: c misra pc-lint

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

有人可以告诉我如何解决这个问题吗?

2 个答案:

答案 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 intsigned int

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

[请注意资料免责声明]