C and C++


LANG.STRUCT.LOOP.NOSTEP : Missing for-loop Step

Summary

The third ("step") clause of a for loop header is empty.

If all three clauses in the for loop header are empty, a Missing for-loop Step warning will not be issued.

Properties

Class Name Missing for-loop Step
Significance style
Mnemonic LANG.STRUCT.LOOP.NOSTEP
Categories
MisraC2023 MisraC2023:14.2 A for loop shall be well-formed
Misra2012 Misra2012:14.2 A for loop shall be well-formed
Misra2004 Misra2004:13.5 The three expressions of a for statement shall be concerned only with loop control
  Misra2004:13.6 Numeric variables being used within a for loop for iteration counting shall not be modified in the body of the loop
MisraC++2023 MisraC++2023:9.5.1 Legacy for statements should be simple
JSF++ JSF++:200 Null initialize or increment expressions in for loops will not be used; a while loop will be used instead.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Missing for-loop Step"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

void g(void){return;}

int lang_struct_loop_nostep(void){
    int i;
    int rv=0;

    for ( ; ; ) {rv++; break;}                        /* specific exception */

    for (i = 0; i < 10; i++){ rv++; }                 /* third clause is present */

    for (i = 0; i < 10; g()){ i++; rv++; }            /* third clause is present */

    for (i = 0; i < 10; ){ i++; rv++; } /* 'Missing for-loop Step' warning issued here */

    for (i = 0; ; ){ rv++; break; }     /* 'Missing for-loop Step' warning issued here
                                         * ('Missing for-loop Termination' warning also issued if enabled)
                                         */
    return rv;
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.