Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
if statement with structure member and rule 10.1
#1
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
<t></t>
Reply
#2
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.
Posted by and on behalf of the MISRA C Working Group
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)