13.5 for() loops - does simplicity matter?

6.13 Control Statement Expressions

Moderators: misra-c, david ward

Post Reply
JohnC
Posts: 3
Joined: Tue Sep 13, 2011 8:11 am
Company: Secure Meters (UK)

13.5 for() loops - does simplicity matter?

Post by JohnC » Tue Sep 13, 2011 8:51 am

I have compiled the following code. The compiler accepts the first loop (ending at X) but rejects the other two (ending at X+2 and at X*2)

extern tUI16 X, Y;
void Fn( void )
{
tUI16 i;
for( i = 0u; i < X; i++ ) /* accepted */
{
Y += i;
}
for( i = 0u; i < (X + 2u); i++ ) /* rejected */
{
Y += i;
}
for( i = 0u; i < (X * 2u); i++ ) /* rejected */
{
Y += i;
}
}

The compiler suppliers say the compiler will accept the second expression if it is "a simple test" and that X+2 and X*2 do not pass this test. I feel this is being too restrictive for rule 13.5. Please may I have an opinion on this.

Thanks,

John

misra-c
Posts: 561
Joined: Thu Jan 05, 2006 1:11 pm

Re: 13.5 for() loops - does simplicity matter?

Post by misra-c » Tue Sep 13, 2011 10:05 am

Rule 13.5 requires that the second expression include testing the loop counter but it doesn't place any other requirements on the test. MISRA C does not require a "simple test" in the second expression. All 3 of your examples are therefore compliant with Rule 13.5.

The concept of a loop counter is not well defined. In order to assist in identifying loop counters, tools may impose restrictions on the loop and may report violations of this rule even though the code is compliant.
---
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “6.13 Control Statement Expressions”