0
S32 pLeftX;
pLeftX = pos.x - 1; //Getting a Misra 2004: 10.1/R warning for this.

这里,pos.x是 int 类型。

4

2 回答 2

1

如果pos.x真的是int并且S32是有符号的 int 类型,那么你的静态分析器就坏了。

规则 10.1 允许隐式类型转换为具有相同符号的更广泛类型。如果pos.x是 int,则表达式中的类型是int + int。结果是一个int,它总是有符号的。然后将其隐式转换为 32 位有符号整数,这很好。

于 2013-06-17T06:17:58.757 回答
1

我会先看看该工具是如何配置的。int的大小是多少?根据 C90 标准,int 的大小由实现定义,可以是 16 位或更大。假设 S32 是 32 位有符号整数类型,我的理解是:

  1. 如果 int 的大小是 32 位,那么没有问题。
  2. 如果 int 的大小大于 32 位,那么问题是存在到更窄类型的隐式转换。
  3. 如果 int 的大小小于 32 位,那么问题是赋值的右侧是一个复杂的表达式,其结果被隐式转换为更宽的类型。
于 2015-09-06T11:18:12.923 回答