c - 运算符 '|' 不允许的操作数 [MISRA 2012 规则 10.1,必需]

标签 c macros misra

在 10.1 规则的 Misra 警告下方观察到。它说“运算符 ‍‍‍| 不允许操作数。

如何避免此警告?

这是误导性的,因为语句中没有使用|

#define C_BYTE unsigned char
C_BYTE SendStatus;
#define SEND_PENDING   0x10

SendStatus &= (C_BYTE) ~ ((C_BYTE) SEND_PENDING);

编辑:

我正在使用 Misra 2012 来检查 QA-C 警告。使用批处理文件编译代码。

#define BYTE unsigned char
#define REQUEST  0x01
#define PENDING  0x10
#define D_PENDING  0x20
#define SEND_PENDING (PENDING|D_PENDING|REQUEST)

struct cp {    
  BYTE SessionStatus;
  BYTE SendStatus;
};

案例1:

BYTE fun2( void )
{
    cp.SendStatus &= (BYTE) ~ ((BYTE) SEND_PENDING); //Warning observed for this line

    if((cp.SendStatus & (BYTE) REQUEST) != 0u)
    {
        cp.SendStatus &= (BYTE) ~ (BYTE) REQUEST;
        return 1;
    }
}

情况2:

void fun1(void)
{
    BYTE ChkStatus = (cp.SendStatus & (BYTE) SEND_PENDING); //Warning observed for this line

    if ((bool)ChkStatus)
    {
        cp.SendStatus |= ((BYTE) REQUEST);
    }
    else
    {
        cp.SendStatus |= ((BYTE) PENDING);
    }

}

最佳答案

进行如下修改以避免出现此警告。

#define REQUEST    0x01u
#define PENDING    0x10u
#define D_PENDING  0x20u

关于c - 运算符 '|' 不允许的操作数 [MISRA 2012 规则 10.1,必需],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57575579/

相关文章:

c++ - window操作系统下c控制台运行时禁用全键鼠

algorithm - 以下宏在竞争性编程中意味着什么?

c - C 中的类型检查宏参数

c++ - 使用宏打开/关闭 openmp

c++ - 如何解决此 lint 警告 "Implicit binary conversion from int to unsigned int"

c - 为什么 MISRA-C :2004 throw an error here?

mysql - 在c中将文件流传输到mysql

c - c 的 displayArray 函数

c - 在遇到换行符时,printf是否总是刷新缓冲区吗?

c - MISRA C :2012: Rule 4. 1 八进制和十六进制转义序列应终止