尝试修复MISRA违规规则10.4:无符号32位int和带符号32位int,它们不匹配

时间:2017-11-16 17:56:16

标签: c misra

df[with(df, as.logical(ave(value, group, FUN= function(x) x <quantile(x, probs = 0.99)))), ]

此代码违反了规则10.4,这是由于无符号的var1和签名的var2。

我已尝试将其中一个变量转换为其他变量。但这不是一种通用的方式。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

规则10.4是合理的规则,因为它可以防止可能导致签名变更的隐式类型转换。这就是您的代码中发生的事情,var1 + var2导致var2被静默提升为无符号类型。这不好,因为首先必须签署这个变量的原因。

只需确保跟踪算法中的签名即可。如果签名变量将具有负值,则隐式转换为unsigned是一个错误。或者,如果您知道该值始终为正,因此签名无关紧要,则只需将签名变量转换为uint32_t