c - 违反 MISRA 规则 10.4

标签 c misra

我收到下一个 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/

相关文章:

c - fread() 函数产生垃圾

c - 我可以选择禁用这两个 MISRA 规则 : one statement per function and mandatory function prototypes?

c - 如何使用 CMSIS API 将无符号整数转换为枚举

c - line_c |= 064;/* 错误地设置了位 2,4 和 5 */.. Misra C 指南。这是怎么发生的?

c - 解释 c 中 union 的 sizeof 运算符的行为

c - 如果用户在 scanf 中输入字符来查找整数,如何避免死循环?

c - c中的结构内部的函数指针有什么用?

c - 无法理解 "current"宏如何适用于 x86 架构

c - 在符合 MISRA 的情况下在 C 中传递缓冲区

c - 需要对 MISRA 规则 13.6 进行解释