MISRA 2004:10.1 / R警告

时间:2013-06-14 12:49:40

标签: misra

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

此处,pos.x的类型为int。

2 个答案:

答案 0 :(得分:1)

如果pos.x确实是intS32是有符号的int类型,那么您的静态分析器就会被破坏。

规则10.1允许隐式类型转换为更广泛类型的相同签名。如果pos.x为int,则表达式中的类型为int + int。结果是int,它始终是签名的。然后将其隐式转换为32位signed int,这很好。

答案 1 :(得分:1)

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

  1. 如果int的大小是32位,则没有问题。
  2. 如果int的大小大于32位,则问题在于隐式转换为较窄的类型。
  3. 如果int的大小小于32位,那么问题是赋值的右侧是一个复杂的表达式,其结果被隐式转换为更宽的类型。