首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于报表业务的Misra违规10.1 (MISRA C,2012年)

关于报表业务的Misra违规10.1 (MISRA C,2012年)
EN

Stack Overflow用户
提问于 2021-01-08 16:03:54
回答 4查看 130关注 0票数 0

我需要一些代码的帮助。我有一个数组,让我们称之为array4。现在,我想检查这个数组中至少有3个元素比阈值高。(如声明)

例如。

代码语言:javascript
复制
if(2 > ((array[0] > threshold) + (array[1] > threshold) + (array[2] > threshold) + (array[3] > threshold) ))

米斯拉在抱怨。(规则10.1不允许的操作数运算符"+")是否有另一种方法可以在不检查每个可能的排列的情况下对if语句进行编码?

干杯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-08 16:08:04

如何显式地将那些讨厌的不可加法布尔值转换为整数1/0?

代码语言:javascript
复制
if(2 > ((array[0] > threshold?1:0) + (array[1] > threshold?1:0) + (array[2] > threshold?1:0) + (array[3] > threshold?1:0) ))
票数 -1
EN

Stack Overflow用户

发布于 2021-01-08 16:17:01

把一条线拆下来怎么样,可能是一个循环?它也可以更具可读性:

代码语言:javascript
复制
int check = 0;
for (int i = 0; i<4; i++) {
  if (array[i] > threshold) {check++;}
}
if (check >= 3) ...

您的if语句实际上似乎是在测试其他“至少3更高”的东西,而不是if (2 > ...) (最多一个?)。

票数 2
EN

Stack Overflow用户

发布于 2021-01-10 11:01:59

这个问题的核心是误解..。布尔型true的值为1false0 --您可以将三个布尔值相加。

布尔值要么是true,要么是false

从数学上讲,+运算符对布尔值没有任何意义:这就是这个特殊的MISRA规则的基本原理(也请参阅解释基本类型的附录).布尔值的C实现被破坏是没有帮助的。

其他的答案提供了其他的选择。但请原谅我们的尤达条件,特别是你似乎对你的解释错了.if ( 2 > ... )甚至不是你的假条件,它需要是if ( 2 < ... )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65632408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档