我收到下一个 MISRA 错误: 规则 10.4 该等式运算符的操作数是不同“基本类型”类别( bool 型和无符号型)的表达式。 代码如下所示:
#define TRUE (1!=0)
#define FALSE (0!=0)
typedef unsigned char boolean;
boolean active;
getActive(&active);
if (TRUE == active) <<<<<<<<<<<< HEre is the conflicting line
{
// DO Something
}
如果我删除 TRUE :
if (active)
出现 MISTA 规则 14.4:“控制表达式不是‘本质上 bool ’表达式”
所以我无法找出解决方案,
我看到使用
#define TRUE 1U
#define FALSE 0U
解决了这个问题,但恐怕我买不起这个解决方案,因为我使用的是来自第三方的大继承代码,使用 (1!=0) 表达式。 我想这个表达式更加“智能”和可移植,因为在某些系统中 TRUE/FALSE 的含义可能会变为 0/1,但我想知道我是否可以保留:
#define TRUE (1!=0)
#define FALSE (0!=0)
并以处理 MISRA 问题的方式编写我的条件表达式
最佳答案
您的 MISRA 检查程序无法确定这些是您的 bool 类型。
如果您被 C90 困住了并且只有这样:您需要以某种方式通知您的工具您正在使用哪种自定义 bool 类型。否则它将无法判断这些宏的用途。
否则,只需使用stdbool.h
。 2019 年几乎没有理由不这么做。
关于c - 违反 MISRA 规则 10.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660655/