Countable loops


Loops are considered to be countable if they take any of the following forms:

Read syntax diagramSkip visual syntax diagram
Countable for loop syntax with single statement

>>-for--(--+--------------------+--;--exit_condition--;--increment_expression--)-->
           '-iteration_variable-'                                                  

>--statement---------------------------------------------------><

Read syntax diagramSkip visual syntax diagram
Countable for loop syntax with statement block

>>-for--(--+--------------------+--;--+------------+--)--------->
           '-iteration_variable-'     '-expression-'      

>--{--+------------------+--+----------------+--increment_expression--+----------------+--}-><
      '-declaration_list-'  '-statement_list-'                        '-statement_list-'      

Read syntax diagramSkip visual syntax diagram
Countable while loop syntax

>>-while--(--exit_condition--)---------------------------------->

>--{--+------------------+--+----------------+--increment_expression--}-><
      '-declaration_list-'  '-statement_list-'                            

Read syntax diagramSkip visual syntax diagram
Countable do while loop syntax

>>-do--{--+------------------+--+----------------+--increment_expression--}--while--(--exit_condition--)-><
          '-declaration_list-'  '-statement_list-'                                                         

The following definitions apply to these syntax diagrams:
iteration_variable
is a signed integer that has either automatic or register storage class, does not have its address taken, and is not modified anywhere in the loop except in the increment_expression.
exit_condition
takes the following form:
Read syntax diagramSkip visual syntax diagram
|--increment_variable--+-<=-+--expression-----------------------|
                       +-<--+               
                       +->=-+               
                       '->--'               

where expression is a loop-invariant signed integer expression. expression cannot reference external or static variables, pointers or pointer expressions, function calls, or variables that have their address taken.
increment_expression
takes any of the following forms:
  • ++iteration_variable
  • --iteration_variable
  • iteration_variable++
  • iteration_variable--
  • iteration_variable += increment
  • iteration_variable -= increment
  • iteration_variable = iteration_variable + increment
  • iteration_variable = increment + iteration_variable
  • iteration_variable = iteration_variable - increment
where increment is a loop-invariant signed integer expression. The value of the expression is known at run time and is not 0. increment cannot reference external or static variables, pointers or pointer expressions, function calls, or variables that have their address taken.


Voice your opinion on getting help information Ask IBM compiler experts a technical question in the IBM XL compilers forum Reach out to us