MisraC 2012:规则10.5

问题描述 投票:0回答:1
QA-C规则4303指出,“基本上是布尔”类型的表达 签名类型。我想了解,如果我们本质上打算布尔来签名类型,则可能是什么实际问题?在C90中,由于没有使用布尔数据类型类型的Typedefs,因此本质上是布尔值。请有人用示例解释实际问题

c boolean misra typecasting-operator qa-c
1个回答
1
投票
使用奇怪的类型组合可能表明是无意的错误。有了规则,静态分析仪可以捕获此类错误。

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

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

该代码很好,明智,并且一目了然也符合Misra的规定。但是,由于程序员有倾向于用咖啡洗礼的新键盘,因此他们会得到粘性键,因此也许可以键入此信息:

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

这是胡说八道的代码,但完全有效的C,因此编译器可能对此错误保持沉默。例如,GCC带有最大警告很高兴地跳过它 - 甚至没有帮助。
但是,由于

-Wconversion

是“基本上是布尔值”,而10.5不允许将这种表达式施放给任何其他类型,因此该错误应由您的静态分析发现。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.