MISRA Discussion Forums

Full Version: if statement with structure member and rule 10.1
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have a structure containing an unsigned int member; if I use any of the relational operators (>=, = u16_rev1_min) /* this violates rule 10.1 */
{
// do something...
}

uint16_t u16_rev1_min, u16_tmp;
u16_tmp = st_hardware_revs.u16_hw_rev1;
if (u16_tmp >= u16_rev1_min) /* this does not violates rule 10.1 */
{
// do something...
}
[/code]

My initial thought was due to the underlying 'int' type of the relational operator, however if this is the case then why does the second piece of code pass? Am I missing some implicit conversion applied to the strucuture reference?

Regards
Rule 10.1 is concerned with underlying types of expressions but not with the form of those expressions. Therefore two expressions with an underlying type of unsigned int should be treated in the same manner regardless of whether, for example, one is an object (variable) and the other is a member of a structure.

This would be something to discuss with the supplier of the checking tool as it seems to be diagnosing Rule 10.1 violations when it should not be doing so.