简体   繁体   English

运算符“|”的不允许的操作数 [MISRA 2012 规则 10.1,需要]

[英]Unpermitted operand to operator '|' [MISRA 2012 Rule 10.1, required]

Observed below Misra warning for 10.1 rule.在 Misra 警告下方观察到 10.1 规则。 It says "Unpermitted operand to operator ‍‍‍ | .它说:“未经许可的操作数运算符|

How to avoid this warning ?如何避免这个警告?

This is misleading as |这是误导为| is not being used in the statement.语句中未使用。

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

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

EDIT:编辑:

I am using Misra 2012 to check QA-C warnings.我正在使用 Misra 2012 来检查 QA-C 警告。 compiling the code using a batch file.使用批处理文件编译代码。

#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;
};

Case 1:情况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;
    }
}

Case 2:案例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);
    }

}

Modify as below to avoid this warning.修改如下以避免此警告。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM