Die in einem geschachtelten Programm verwendeten Namen lassen sich unterscheiden in „lokale“ und „globale“ Namen.
Lokale Namen
Lokale Namen sind nur innerhalb des Programms gültig, in dem die zugehörigen Daten beschrieben sind. Die meisten standardmäßig lokalen Namen können als global vereinbart werden. Stets lokale Namen sind:
Paragrafennamen
Kapitelnamen
Globale Namen
Globale Namen sind nicht nur in dem Programm gültig, in dem sie definiert sind, sondern darüberhinaus auch in dessen inneren Programmen. Stets globale Namen sind:
Namen, die in der CONFIGURATION SECTION vereinbart werden:
Rechenanlagenname
Alphabetnamen
Klassennamen
Bedingungsnamen (SPECIAL-NAMES-Paragraf)
Merknamen
symbolische Zeichen
CURRENCY SIGN-Zeichen
DECIMAL-POINTCOBOL-Sonderregister:
TALLY
PRINT-SWITCH
SORT-Register
RETURN-CODE
Die folgenden Namenstypen sind standardmäßig lokal und können in geschachtelten Programmen explizit als global vereinbart werden:
Bedingungsnamen
Datennamen
Dateinamen
Indexnamen
Datensatznamen
Listennamen
Typnamen
Die Vereinbarung eines Namens als global erfolgt mit der GLOBAL-Klausel (siehe "GLOBAL-Klausel " und "GLOBAL-Klausel ").
Bei Typnamen bezieht sich die Angabe GLOBAL auf die Definition des Typs und nicht auf die mit Hilfe der Typdefinition erzeugten Datenbeschreibung.
Bestimmung des gültigen Namens
Wird ein Name referenziert, so wird der gültige Name aus der Menge aller in dem geschachtelten Programm definierten Namen nach folgenden Präzedenzregeln ausgewählt:
Der referenzierte Name ist im selben Programm definiert.
Wenn 1. nicht zutrifft, ist der referenzierte Name im direkt übergeordneten (nächstäußeren) Programm als globaler Name definiert.
Wenn weder 1. noch 2. zutrifft, ist der referenzierte Name im indirekt übergeordneten Programm als globaler Name definiert.
Bedingung 3. wird solange geprüft, bis die Datenerklärung des referenzierten Namens in einem der weiteren indirekt übergeordneten Programme gefunden ist, ggf. erst im äußersten Programm.
Beispiel 12-6
Beispiel 12-7
PROGRAM-ID. A-PROG. ... 01 T1 TYPEDEF STRONG GLOBAL. 02 NAME PIC X(30). 02 STRASSE PIC X(80). ... 01 A1 TYPE T1. 1) 01 B1 TYPE T1 GLOBAL. ... PROGRAM-ID. B-PROG. ... 01 T1 TYPEDEF STRONG. 2) 02 UNTERSTRUKTUR. 05 NAME-3 PIC X(30). 05 STRASSE-3 PIC X(80). ... 01 C1 TYPE T1. 3) ... MOVE B1 TO C1. 4) ... END PROGRAM B-PROG. END PROGRAM A-PROG.
- verwendet Typdefinition T1 aus A-PROG;
Definition A1 ist lokal in A-Prog, Definition B1 ist global - Typ T1 ist lokal in B-PROG
- verwendet Typdefinition T1 aus B-PROG
- Zuweisung ist zulässig, da T1 in A-PROG äquivalent zu T1 in B-PROG