Label:
Ein Label besteht aus einem eindeutigen Namen und einem Doppelpunkt : und kennzeichnet irgendwo im lauffähigen Code eine Stelle, an die gesprungen werden kann. Man nennt ein Label deswegen auch eine Sprungadresse.
|
|
Siehe auch goto
Details
Labels werden vom Compiler zuerst in ein neues, eindeutiges Assembler-Label und danach in eine Adresse umgewandelt, welche für den Prozessor die Position der nächsten auszuführenden Instruktion angibt. Kontrollstrukturen wie for-Schleifen oder if-else-Blöcke werden vom Compiler ebenfalls mittels Labels umgesetzt, indem künstliche Sprungadressen in den Assembler-Code eingefügt werden und aufgrund von Auswertungen auf Prozessor-Ebene an dieselben verzweigt wird. Folgendes Beispiel zeigt einen Ausschnitt aus den vom Compiler hergestellten (und nicht optimierten) Assembler-Befehlen für eine if-else-Entscheidung:
|
|
Hier wurden die beiden Labels L2 und L4 eingefügt. L2 entspricht dabei der Sprungadresse, welche angesprungen wird, wenn i ungleich (jne) Eins ist, und L4 entspricht dem Ende des If-Blocks, zu welchem am Ende des true-Teiles gesprungen (jmp) werden muss.
Spezielle Labels
Es gibt einige Labels, oder Keywords, denen eine spezielle Bedeutung zukommt:
case X: | Dieses Label kennzeichnet einen explizit ausprogrammierten Teil einer switch-Struktur zu welchem gesprungen wird, wenn die Bedingung der switch-Anweisung den Wert X ergibt. Ausserhalb der zugehörigen switch-Struktur hat dieses Label keine Gültigkeit. |
|---|---|
default: | Dies ist das Label einer switch-Struktur, welche den Teil markiert, welcher aufgerufen wird, wenn alle anderen Teile nicht zutreffen. Ausserhalb der zugehörigen switch-Struktur hat dieses Label keine Gültigkeit. |
public: | Diese Keywords sehen zwar aus wie Labels, sind es jedoch nicht. Der Compiler benutzt diese Angaben in C++, um die verschiedenen Zugriffsberechtigungen innerhalb von Klassen festzulegen. Diese Labels können an den vorgesehenen Positionen in beliebiger Reihenfolge und auch mehrfach auftreten. |