Прежде всего, это похоже на: How are integer types converted implicitly?, но с другим предупреждением MISRA.Правило 10.1 и перечисления MISRA
Компилятор не генерирует ошибку MISRA, но инструмент статического анализа делает это. У меня есть билет с производителем инструмента.
Дано:
#include <stdio.h>
enum Color {RED, VIOLET, BLUE, GREEN, YELLOW, ORANGE};
int main(void)
{
enum Color my_color;
my_color = BLUE;
if (my_color == YELLOW) // Generates MISRA violation, see below.
{
printf("Color is yellow.\n");
}
else
{
printf("Color is not yellow.\n");
}
return 0;
}
Статический инструмент анализа генерирует нарушение Мишра для if
заявления:
MISRA-2004 Rule 10.1 violation: implicitly changing the signedness of an expression.
Converting "4", with underlying type "char" (8 bits, signed),
to type "unsigned int" (32 bits, unsigned) with different signedness.
Является ли компилятор правильно (не идентифицировать дефект) или статический инструмент анализа?
же код, та же ошибка, отчет об ошибке только немного больше подробный. Я не вижу разницы между вашими фрагментами кода. – Mat
Мне было бы интересно узнать, какой ответ вы получили от своего поставщика инструмента, но похоже, что инструмент сломан. – Andrew