В следующих строках я получаю сообщения о различных проблемах из инструмента статического анализа Parasoft C / C ++ Test и из программы проверки MISRA IAR Embedded Workbench:
[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};
Теперь средство проверки MISRA Embedded Workbench IAR жалуется на то, что целочисленная константа со знаком, 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 MISRA:
ИСКЛЮЧЕНИЯ
"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."
Какой чекер правильный?