Copyright (C) 2000-2012 |
GNU Info (g77-295.info)CYCLE and EXITThe `CYCLE' and `EXIT' Statements --------------------------------- The `CYCLE' and `EXIT' statements specify that the remaining statements in the current iteration of a particular active (enclosing) `DO' loop are to be skipped. `CYCLE' specifies that these statements are skipped, but the `END DO' statement that marks the end of the `DO' loop be executed--that is, the next iteration, if any, is to be started. If the statement marking the end of the `DO' loop is not `END DO'--in other words, if the loop is not a block `DO'--the `CYCLE' statement does not execute that statement, but does start the next iteration (if any). `EXIT' specifies that the loop specified by the `DO' construct is terminated. The `DO' loop affected by `CYCLE' and `EXIT' is the innermost enclosing `DO' loop when the following forms are used: CYCLE EXIT Otherwise, the following forms specify the construct name of the pertinent `DO' loop: CYCLE CONSTRUCT-NAME EXIT CONSTRUCT-NAME `CYCLE' and `EXIT' can be viewed as glorified `GO TO' statements. However, they cannot be easily thought of as `GO TO' statements in obscure cases involving FORTRAN 77 loops. For example: DO 10 I = 1, 5 DO 10 J = 1, 5 IF (J .EQ. 5) EXIT DO 10 K = 1, 5 IF (K .EQ. 3) CYCLE 10 PRINT *, 'I=', I, ' J=', J, ' K=', K 20 CONTINUE In particular, neither the `EXIT' nor `CYCLE' statements above are equivalent to a `GO TO' statement to either label `10' or `20'. To understand the effect of `CYCLE' and `EXIT' in the above fragment, it is helpful to first translate it to its equivalent using only block `DO' loops: DO I = 1, 5 DO J = 1, 5 IF (J .EQ. 5) EXIT DO K = 1, 5 IF (K .EQ. 3) CYCLE 10 PRINT *, 'I=', I, ' J=', J, ' K=', K END DO END DO END DO 20 CONTINUE Adding new labels allows translation of `CYCLE' and `EXIT' to `GO TO' so they may be more easily understood by programmers accustomed to FORTRAN coding: DO I = 1, 5 DO J = 1, 5 IF (J .EQ. 5) GOTO 18 DO K = 1, 5 IF (K .EQ. 3) GO TO 12 10 PRINT *, 'I=', I, ' J=', J, ' K=', K 12 END DO END DO 18 END DO 20 CONTINUE Thus, the `CYCLE' statement in the innermost loop skips over the `PRINT' statement as it begins the next iteration of the loop, while the `EXIT' statement in the middle loop ends that loop but *not* the outermost loop. automatically generated by info2www version 1.2.2.9 |