Page 1 of 1

For Loop: must update expression use only invariants?

Posted: Wed Nov 29, 2017 3:47 pm
by swestin
MISRA C:2012 Rule 14.2 puts the following restriction on the "third clause" (called "expression" in C++:2008):

Shall not use objects that are modified in the for loop body.

For example, the following violates this rule:

Code: Select all

    for (int i=0; i<500; i = i + j)
    {
        j = random();
    }
I can't find a corresponding rule in C++:2008. Am I overlooking something?

- Stephen H. Westin

Re: For Loop: must update expression use only invariants?

Posted: Wed Jan 17, 2018 4:37 pm
by misra cpp
Your example violates rule 6-5-4

i is a loop counter (initialised before the condition, tested with a relational operator in the condition and modified in the expression).

6-5-4 requires that the loop counter shall only be modified by one of ++ -- += n or -= n where n is constant for the duration of the loop