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 位有符号整数类型,我的理解是: