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.
#include <stdio.h>
int main(){
goto End_of_Program;
printf("This part is overjumped.\n");
End_of_Program:
printf("End of program.\n");
return 0;
}
|
End of program.
|
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:
if(i == 1){
i++;
}else{
i--;
}
| cmpl $1, -12(%ebp)
jne L2
leal -12(%ebp), %eax
addl $1, (%eax)
jmp L4
L2:
leal -12(%ebp), %eax
subl $1, (%eax)
L4:
|
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.
Vordefinierte Labels
Es gibt einige Labels, oder Keywords, die fest vordefiniert sind:
case X: | Dieses Label kennzeichnet einen explizit definierten 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: protected: private: | 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. |
|