21-03-2014, 03:07 PM
We shall divide our response into 3 sections.
1. This code contains a constraint error and so will violate Rule 1.1. Both C90 6.6.4.2 and C99 6.8.4.2(3) list in their constraint section that the case label "shall be an integer constant expression". A const object is not an "integer constant expression" in C. The code would be compliant with C if the following had been used
#define CONSTANT_ONE 12U
It could be that this is what the PC-lint message is referring to, since CONSTANT_ONE in the original example is an object not a numeric value.
2. Assuming uint8_t has been defined as "unsigned char", there is no violation of 6.2 in this example. If uint8_t had been defined as plain "char", then rule 6.1 would have been violated in the initialisations of CONSTANT_ONE and CONSTANT_TWO.
3. MISRA-C:2004 rules 6.1 and 6.2 are covered by the essential type rules R.10.1 - R.10.8 of MISRA C:2012.
1. This code contains a constraint error and so will violate Rule 1.1. Both C90 6.6.4.2 and C99 6.8.4.2(3) list in their constraint section that the case label "shall be an integer constant expression". A const object is not an "integer constant expression" in C. The code would be compliant with C if the following had been used
#define CONSTANT_ONE 12U
It could be that this is what the PC-lint message is referring to, since CONSTANT_ONE in the original example is an object not a numeric value.
2. Assuming uint8_t has been defined as "unsigned char", there is no violation of 6.2 in this example. If uint8_t had been defined as plain "char", then rule 6.1 would have been violated in the initialisations of CONSTANT_ONE and CONSTANT_TWO.
3. MISRA-C:2004 rules 6.1 and 6.2 are covered by the essential type rules R.10.1 - R.10.8 of MISRA C:2012.
Posted by and on behalf of the MISRA C Working Group