Données d'étiquetage et attribut LABEL
Une étiquette est une constante d'étiquette ou la valeur d'une variable d'étiquette.
Si une liste de constantes d'étiquette est fournie, la variable doit toujours avoir pour valeur un membre de cette liste, et les constantes d'étiquette de la liste doivent être connues dans le bloc contenant la déclaration d'étiquette. La liste entre parenthèses des constantes d'étiquette peut être utilisée dans une spécification d'attribut LABEL pour un tableau d'étiquettes.
Une constante d'étiquette est un nom écrit en tant que préfixe d'étiquette d'une instruction (autre que PROCEDURE, ENTRY, PACKAGE, ou FORMAT) afin que, pendant l'exécution, le contrôle du programme puisse être transféré à cette instruction par le biais d'une référence à celle-ci. ( Les instructions discutent de la syntaxe du préfixe d'étiquette.)
Par exemple, dans la ligne de code suivante, Abcde est une constante d'étiquette.
Abcde: Miles = Speed*Hours;
L'instruction étiquetée peut être exécutée soit par l'exécution séquentielle normale des instructions, soit en utilisant l'instruction GO TO pour lui transférer le contrôle à partir d'un autre point du programme.
Une variable d'étiquette peut être associée à une autre variable d'étiquette ou à une constante d'étiquette. Lorsqu'une telle affectation est effectuée, l'environnement de l'étiquette source est affecté à la cible. Si vous déclarez qu'un tableau statique d'étiquettes a des valeurs initiales, le tableau est traité comme non assignable.
Une variable d'étiquette utilisée dans une instruction GO TO doit avoir pour valeur une constante d'étiquette utilisée dans un bloc actif au moment de l'exécution de l'instruction GO TO . Prenons l'exemple suivant :
declare Lbl_x label;
Lbl_a: statement;
.
.
.
Lbl_b: statement;
.
.
.
Lbl_x = Lbl_a;
.
.
.
go to Lbl_x;
Lbl_a et Lbl_b sont des constantes d'étiquette, et Lbl_x est une variable d'étiquette. En assignant Lbl_a à Lbl_x, l'instruction GO TO Lbl_x transfère le contrôle à l'instruction Lbl_a . Ailleurs, le programme peut contenir une instruction assignant Lbl_b à Lbl_x. Ainsi, toute référence à Lbl_x serait identique à une référence à Lbl_b. Cette valeur de Lbl_x est conservée jusqu'à ce qu'une autre valeur lui soit attribuée.
Si une variable d'étiquette a une valeur non valide, la détection d'une telle erreur n'est pas garantie. Dans l'exemple suivant, le transfert est effectué vers un élément particulier du tableau Z en fonction de la valeur de I.
go to Z(I);
.
.
.
Z(1): if X = Y then return;
.
.
.
Z(2): A = A + B + C * D;
.
.
.
Z(3): A = A + 10;
Si Z(2) est omis, GO TO Z(I) lorsque I=2 soulève la condition ERROR. GO TO Z(I) lorsque I < LBOUND(Z) ou I >
HBOUND(Z) provoque des résultats imprévisibles si la condition SUBSCRIPTRANGE est désactivée.
