S32 pLeftX;
pLeftX = pos.x - 1; //Getting a Misra 2004: 10.1/R warning for this.
这里,pos.x是 int 类型。
S32 pLeftX;
pLeftX = pos.x - 1; //Getting a Misra 2004: 10.1/R warning for this.
这里,pos.x是 int 类型。
如果pos.x真的是int并且S32是有符号的 int 类型,那么你的静态分析器就坏了。
规则 10.1 允许隐式类型转换为具有相同符号的更广泛类型。如果pos.x是 int,则表达式中的类型是int + int。结果是一个int,它总是有符号的。然后将其隐式转换为 32 位有符号整数,这很好。
我会先看看该工具是如何配置的。int的大小是多少?根据 C90 标准,int 的大小由实现定义,可以是 16 位或更大。假设 S32 是 32 位有符号整数类型,我的理解是: