繁体   English   中英

MISRA C 2012:规则 10.5

[英]MISRA C 2012: Rule-10.5

QA-C 规则 4303 声明“本质上布尔”类型的表达式被强制转换为有符号类型。 我想了解如果我们基本上将 boolean 类型转换为带符号的类型,可能会出现什么实际问题? 在 C90 中,因为没有 boolean 数据类型 typedef 被使用,它们基本上被归类为 boolean。 请有人用例子解释真正的问题

使用奇怪的类型组合可能表明存在无意的错误。 有了适当的规则,static 分析器就可以捕获此类错误。

例如,假设我们想做一些按位算术。 我们在无符号类型上执行此操作以使我们免于许多有符号类型问题,然后将结果分配给有符号类型:

int32_t result = (int32_t)(1u << n);

这段代码很好、很合理,而且乍一看也符合 MISRA。 然而,由于程序员倾向于用咖啡给他们的新键盘洗礼,他们会得到粘滞键,因此可能会输入以下内容:

int32_t result = (int32_t)(1u < n); 

这是无意义的代码,但完全有效的 C,因此编译器可能对这个错误保持沉默。 例如,带有最大警告的 gcc 很高兴跳过它 - 甚至-Wconversion没有帮助。

但是由于(1u < n)是“本质上是布尔值”并且 10.5 不允许将此类表达式转换为任何其他类型,因此您的 static 分析器应该会发现该错误。

暂无
暂无

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

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