MISRA Discussion Forums

Full Version: Enumeration specifiers
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
My question is if the code bellow is not compliance with misrac-2004

uint16_t GetSpeed (void);
void IncreaseSpeed (void);
void DecreaseSpeed (void);
void GoodSpeed (void);

enum tagSPEED
{
Low,
Medium,
High
};

void main (void)
{
uint16_t uSpeed;

uSpeed = GetSpeed();

switch (uSpeed)
{
case Low:
IncreaseSpeed();
break;

case Medium:
GoodSpeed (void);
break;

case High:
DecreaseSpeed (void);
break;

default:
break;
}
}

Is there any solution for this case?


Normative reference:
Ansi-Iso-9899-1990 (6.5.2.2)
Misra-c2004 (6.10.3)
MISRA-C meeting 22-8-2006

The type of the enumeration constant is defined by ISO to be signed int.

In your example, the switch selector has type unsigned int, and the case constants have type signed int. This is a violation of rule 10.1.