在下面的行中,我得到了不同的问题,从SypFoT C/C++测试静态分析工具和IAR嵌入式工作台MISRA RECKER报告:

[1] static unsigned int array_a[30] = {0U};
[2] static float array_b[20] = {0.0f};

Parasoft静态分析表明:
Not all elements of variable ‘array_a’ are initialized.
Not all elements of variable ‘array_b’ are initialized.

IAR Embedded Workbench对上述语句没有问题(其MISRA检查器已打开)。
我可以让变量“array_b”的消息消失:
[3] static float array_b[20] = {0};

然而,同样的技巧对“array廑a”不起作用:
[4] static unsigned int array_a[30] = {0};

现在,IAR Embedded Workbench MISRA checker正在抱怨,因为有符号整数常量0正被分配给无符号整数:
Error[Pm127]: a 'U' suffix shall be applied to all constants of 'unsigned' type (MISRA C 2004 rule 10.6)

Parasoft静态分析未显示上述4号线存在任何问题。
我认为这可以归结为对米斯拉规则9.2“零”的解释:
例外情况
"All the elements of arrays or structures can be initialized (to zero or NULL)
by giving an explicit initializer for the first element only. If this method
of initialization is chosen then the first element should be initialized
to zero (or NULL), and nested braces need not be used."

哪个检查程序是正确的?

最佳答案

Parasoft静态分析表明:
并非变量“array_a”的所有元素都已初始化。
这是不对的。所有元素都被初始化,并且代码没有违反MISRA-C 9.2,它显式地允许在数组中只有一项设置为零的情况下进行零初始化。
静态浮点数组;
严格地说,这是不符合MISRA的,因为所有整数文本必须是无符号的,因为它们在您的第一个代码。更改为0u0U或确实0.0f(后者最有意义)。
静态无符号整数数组;
同样,不符合MISRA。
Parasoft静态分析未显示上述4号线存在任何问题。
在上述所有情况下,Parasoft似乎都是不正确的。你应该在他们的MISRA检查器中报告这个错误。
在上述所有情况下,IAR似乎都是正确的。

关于c - MISRA 9.2初始化浮点数组和无符号数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21442539/

10-11 20:54