Code opération RPG III / RPG/400 · IBM i (AS/400) · Structures de contrôle
END
Fermer un groupe IF, DO, DOW, DOU, SELEC ou CAS
Termine le groupe ouvert en dernier ; ENDIF, ENDDO, ENDSL et ENDCS sont des variantes qui doivent correspondre au groupe fermé.
Syntaxe
C END
C ENDIF
C ENDDO
C ENDDO2
C ENDSL
C ENDCS
- Code opération (28-32)
ENDferme n'importe quel groupe.ENDIFne ferme qu'unIFxx,ENDDOunDO,DOWxxouDOUxx,ENDSLunSELEC,ENDCSun groupeCASxx.- Facteur 2 (33-42)
- Utilisé seulement sur le
ENDou leENDDOd'unDO: c'est l'incrément de l'indice (1 si absent). Voir la ficheDO. - Effet
- Aucun indicateur n'est positionné. Pour un
IFxxou unSELEC, l'exécution continue après leEND. Pour unDOWxx, unDOUxxou unDO, leENDrenvoie au test ou à l'indice ; la boucle s'arrête quand sa condition le décide.
À quoi ça sert
En RPG III il n'y a ni accolade ni bloc délimité : chaque IFxx, DO, DOWxx, DOUxx, SELEC et groupe CASxx se ferme par un END. Un END ferme toujours le groupe le plus récemment ouvert, ce qui permet les imbrications (premier exemple).
Le compilateur RPG/400 accepte aussi les formes nommées ENDIF, ENDDO, ENDSL et ENDCS, qui rendent un long programme plus lisible : on voit d'un coup d'œil ce que ferme chaque ligne (deuxième exemple).
Exemple 1 : Un END par groupe, du plus récent au plus ancien
H* END : un END ferme le groupe ouvert en dernier (IF, DO, DOW)
C Z-ADD1 N 10
C N DOWLE3
C N IFEQ 2
C 'Deux' DSPLY
C END
C* Le END precedent a ferme le IF ; le dernier fermera le DOW
C N DSPLY
C ADD 1 N
C END
C 'Fin' DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
1
Deux
2
3
Fin
Le premier END ferme le IFEQ (« Deux » ne s'affiche qu'au tour 2), le second ferme le DOWLE. Le programme affiche 1, Deux, 2, 3 puis Fin.
Exemple 2 : ENDIF, ENDSL, ENDDO
H* END : variantes ENDIF, ENDDO, ENDSL, ENDCS, qui doivent correspondre
C Z-ADD1 N 10
C DO 2 I 10
C N IFEQ 1
C 'Un' DSPLY
C ENDIF
C SELEC
C I WHEQ 2
C 'Tour 2' DSPLY
C OTHER
C 'Tour 1' DSPLY
C ENDSL
C ENDDO
C N DOWLE2
C ADD 1 N
C ENDDO
C N DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Un
Tour 1
Un
Tour 2
3
Chaque groupe est fermé par sa forme nommée : ENDIF pour le IFEQ, ENDSL pour le SELEC, ENDDO pour le DO puis pour le DOWLE.
Le piège
Les formes nommées doivent correspondre au groupe. Un ENDDO placé sous un IFEQ est refusé : QRG5248, gravité 20, « Opération ENDxx hors séquence. » Il en va de même d'un ENDSL ou d'un ENDCS sous un IFxx (essais faits avec les trois). ENDIF sous un IFEQ est accepté.
Un END manquant arrête la compilation : QRG5177, gravité 30, « L'opération ENDxx n'est pas définie pour le groupe d'opérations DO, DOUxx, DOWxx, IFxx ou SELEC. » La ligne signalée est la fin du programme, loin du IFxx oublié : comptez vos groupes.
En RPG ILE full free
En RPG ILE full free, chaque structure a sa fin propre, obligatoire : ENDIF, ENDDO, ENDFOR, ENDSL, ENDMON.
if n = 1;
dsply 'Un';
endif;
dow n <= 2;
n += 1;
enddo;