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.