Flag (Informatik)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Mit Flag [flæg] (auf deutsch etwa Markierung) wird eine boolesche Variable oder ein Statusindikator bezeichnet, welcher als Hilfsmittel zur Kennzeichnung bestimmter Zustände benutzt werden kann. Ein Flag kann gesetzt, gelöscht oder ausgelesen werden.

Etymologie[Bearbeiten]

Mailbox USA.jpg

Der englische Begriff Flag ist verwandt mit deutsch Flagge, sollte jedoch nie so übersetzt werden. In der englischen Sprache hat sich eine erweiterte Begriffsbedeutung herausgebildet, bei der to flag nicht nur Flagge zeigen, setzen, hochziehen bedeutet, sondern allgemeiner signalisieren und heranwinken meint (to flag down a taxi, ein Taxi heranwinken). Dies geht vermutlich auf den Brauch in den ländlichen Gebieten der USA zurück, am Briefkasten an der (vom Haus entfernten) Grundstückszufahrt eine kleine (rote) Flagge anzubringen, die hochgedrückt wurde, wenn neue Post eingelegt wurde (eingehend oder ausgehend). Statt des umständlicheren Begriffs der Semaphore für solche Signalisierungseinrichtungen verbreitete sich der Begriff Flag – die Flaggenform und Bezeichnung als Semaphore geht auf die optische Telegrafie und das Winkeralphabet zurück.

Flags im Prozessor[Bearbeiten]

Ein Flag kennzeichnet zum Beispiel bei arithmetischen Berechnungen den Übertrag (Carry-Flag) oder den Überlauf (Overflow-Flag), siehe auch Statusregister.

Flags in der Programmierung[Bearbeiten]

Mit der Einführung von Flags kann auch bei der Programmierung gearbeitet werden, um zum Beispiel das Vorliegen einer Fehlerbedingung in einem Segment an ein anderes Programmsegment zu übermitteln oder um Nutzerrechte zu realisieren.

Welches Format das Flag hat, hängt dabei von der Implementierung ab: Sowohl die typischen binären Werte 0 und 1 als auch für den Menschen verständlichere Varianten wie „Ja“ und „Nein“ können als Flag gelten. Dabei lassen sich Flags in vielen Programmiersprachen über bitweise Operatoren realisieren.

Flags, die mehr als zwei Werte annehmen können, werden nicht als „Flag“, sondern als Statusvariablen bezeichnet. Aus der englischen Sprache findet sich in der Programmierung für synchronisierende Statusvariablen auch der Begriff Semaphore.

Beispiel in der Programmiersprache C[Bearbeiten]

char flag = 0;                        // für einen Flag nimmt man i. d. R. den kleinstmöglichen Datentypen
 
if (flag) puts("Das Flag ist an");    // bei C gilt 0 als falsch; alles andere gilt als wahr
if (!flag) puts("Das Flag ist aus");  // Umkehrung des Wahrheitswertes von flag
                                      // Ausgabe: Das Flag ist aus
 
flag = 1 - flag;                      // Flip-Flop: aus 1 wird 0 und aus 0 wird 1
 
if (flag)
   puts("Das Flag ist an")
else
   puts("Das Flag ist aus");
                                     // Ausgabe: Das Flag ist an
 
flag = ~flag;                        // Alternative für Flip-Flop: Bitweises nicht, aus 00000000 wird 11111111 und umgekehrt
                                     // nicht mit der ersten Alternative kompatibel (~00000001 = 11111110, beide sind wahr)

Debug-Flag [Bearbeiten]

Mitunter werden Merker auch für bedingte Kompilierung eines Quellcodes verwendet; sehr gebräuchlich ist dies vor allem in den Sprachen C und C++:

#define COMPILE_FLAG
// ...
#ifdef COMPILE_FLAG
  // Code-Block 1, der ins Programm einfliesst, wenn COMPILE_FLAG gefunden wird.
#else
  // Code-Block 2, der stattdessen einfliesst, wenn COMPILE_FLAG _nicht_ gefunden wird.
#endif