MISRA 10.3违反当使用断言宏2015年Polyspace错误发现者

9的观点(30天)
我使用断言宏C代码。当检查MISRA 2012违反,Polyspace 2015错误发现者抱怨断言宏的使用与MISRA违反规则10.3:“一个表达式的值不得分配给一个对象具有更窄的类型或不同的基本类型分类。”。
一个很小的例子:
#包括< assert.h >
intmain () {
无符号字符x = 8 u;
无符号char y = 9;
断言(x ! = y);
返回0;
}
问题似乎是类型的布尔表达式的解释(x ! = y)扩展。如果我做以下,没有违反:
#包括< assert.h >
#包括< stdbool.h >
intmain () {
无符号字符x = 8 u;
无符号char y = 9;
bool结果= (x ! = y);
断言((int)结果);
返回0;
}
然而,我不想只创建一个布尔变量来评估断言表达式。同时,C标准状态,布尔表达式扩展到int类型,所以不应该把需要吗?
我做错了什么?

答案(0)