运算符“|”的不允许的操作数[MISRA 2012 规则 10.1,必需]
Unpermitted operand to operator '|' [MISRA 2012 Rule 10.1, required]
观察到低于 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;
};
案例一:
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
观察到低于 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;
};
案例一:
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