例如,可以说我们想做一些位算术。我们在无符号类型上进行此操作,以使我们免于许多签名类型问题,然后将结果分配给签名类型:
int32_t result = (int32_t)(1u << n);
该代码很好,明智,并且一目了然也符合Misra的规定。但是,由于程序员有倾向于用咖啡洗礼的新键盘,因此他们会得到粘性键,因此也许可以键入此信息:
int32_t result = (int32_t)(1u < n);
这是胡说八道的代码,但完全有效的C,因此编译器可能对此错误保持沉默。例如,GCC带有最大警告很高兴地跳过它 - 甚至没有帮助。但是,由于
-Wconversion
是“基本上是布尔值”,而10.5不允许将这种表达式施放给任何其他类型,因此该错误应由您的静态分析发现。