0

我在我的程序中使用了以下代码,在运行 PC-Lint 时会引发以下错误:此行的多个标记 - (lint:46) 字段类型应为 int、unsigned int 或 signed int [MISRA 2004 Rule 6.4,必需] - (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;

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

4

2 回答 2

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;

位域接受的唯一类型是整数类型。

于 2014-11-01T09:04:01.077 回答
0

MISRA-C:2004 与没有boolean类型的 C:90 兼容。

要完全兼容,位域必须是unsigned intsigned int

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

[请注意个人资料免责声明]

于 2014-11-06T11:20:37.257 回答