Das stimmt. Flags sollten nur 2 Zustände annehmen. Die sind aber nicht c-spezifisch.
Man kann sie zum Beispiel dazu einsetzen, um einen Konflikt mit Ressourcen zu vermeiden:
Wenn Du ein Programm hast, dass auf eine bestimmte Datei von mehreren Orten (also aus mehreren Funktionen heraus) schreiben kann, und dieses schreiben kann auch noch gleichzeitig passieren - dann ist es sinnvoll, einen flag zu verwenden.
Ohne Flag:
Funktion 1 will in die Datei schreiben und macht das auch
Funktion 2 will in die Datei schreiben und macht das auch, bevor Funktion 1 fertig ist
Ergebnis: Die Datei ist korrupt - d.h. sie weiss nicht, welchen Zustand sie haben soll.
Mit Flag:
Funktion 1 möchte in die Datei schreiben:
F1 prüft, ob der Flag 0 ist.
Ist flag==1:
F1 muss warten, bis flag==0
Ist flag==0:
F1 setzt den flag auf 1 // damit F2 warten muss, bis er wieder auf 0 steht
F1 schreibt in die Datei
F1 setzt flag wieder auf 0
somit ist gewährleistet, dass die Datei immer nur von einer Funktion beschreiben wird.
Natürlich gibt es noch viel mehr Anwendungsmöglichkeiten für flags...
Im gcc gibt es auch sogenannte flags. Damit kann man in der Kommandozeile Optionen setzen. Zum Beispiel die Option "-Wall". Schreibt man gcc -Wall undsoweiter, wird beim Compilieren ein Flag gesetzt, der auslöst, dass Dir mehr Warnungen angezeigt werden.
Falls Du unter Linux arbeitest (machst Du das?) kannst Du in der Kommandozeile einfach den Befehl "man gcc" eingeben. Dann kommst Du in die manual - Seiten des gcc, wo alle Optionen / Flags aufgelistet sind. [Mit der Return-Taste bewegst Du die Datei weiter nach unten, mit der Taste Q beendest Du das man-Programm]