Bereich und Sichtbarkeit

Die „Sichtbarkeit“ eines Bezeichners bestimmt die Teile des Programms, in denen auf ihn verwiesen werden kann – sein „Bereich“. Ein Bezeichner ist nur in Teilen eines Programms sichtbar (d. h. kann verwendet werden), die zum „Bereich“ gehören, der (mit zunehmender Begrenztheit aufgezählt) auf die Datei, die Funktion, den Block oder den Funktionsprototyp begrenzt ist, in der er sich befindet. Der Bereich eines Bezeichners ist der Teil des Programms, in dem der Name verwendet werden kann. Dies wird manchmal als „lexikalischer Bereich“ bezeichnet. Es gibt vier Arten von Bereichen: Datei, Funktion, Block und Funktionsprototyp.

Der Gültigkeitsbereich aller Bezeichner, abgesehen von Bezeichnungen, wird durch die Ebene bestimmt, auf der die Deklaration erfolgt. Die folgenden Regeln für jede Art von Bereich bestimmen die Sichtbarkeit von Bezeichnern innerhalb eines Programms:

Dateibereich
Der Deklarator oder Typspezifizierer für einen Bezeichner mit Dateigültigkeitsbereich wird außerhalb eines Blocks oder einer Liste von Parametern angezeigt und ist von einer beliebigen Stelle in der Übersetzungseinheit nach seiner Deklaration zugänglich. Bezeichnernamen mit Dateibereich werden häufig als „global“ oder „extern“ bezeichnet. Der Bereich eines globalen Bezeichners beginnt am Punkt seiner Definition oder Deklaration und endet am Ende der Übersetzungseinheit.

Funktionsbereich
Eine Bezeichnung ist die einzige Bezeichnerart, die über einen Funktionsgültigkeitsbereich verfügt. Eine Bezeichnung wird implizit durch ihre Verwendung in einer Anweisung deklariert. Bezeichnungsnamen müssen innerhalb einer Funktion eindeutig sein. (Weitere Informationen über Bezeichnungen und Bezeichnungsnamen finden Sie unter The goto and Labeled Statements [Die goto- und Labeled-Anweisung].)

Blockbereich
Der Deklarator oder Typspezifizierer für einen Bezeichner mit Blockbereich wird innerhalb eines Blocks oder in der Liste der formalen Parameterdeklarationen in einer Funktionsdefinition angezeigt. Er ist nur vom Zeitpunkt der Deklaration oder Definition bis zum Ende des Blocks sichtbar, der die Deklaration oder Definition enthält. Sein Bereich beschränkt sich auf diesen Block sowie alle Blöcke, die in diesem Block geschachtelt sind, und endet bei der geschweiften Klammer, die den zugeordneten Block schließt. Solche Bezeichner werden manchmal als "lokale Variablen" bezeichnet.

Funktionsprototypbereich
Der Deklarator oder Typspezifizierer für einen Bezeichner mit Funktionsprototypbereich wird in der Liste der Parameterdeklarationen in einem Funktionsprototyp (nicht Teil der Funktionsdeklaration) angezeigt. Sein Bereich endet am Ende des Funktionsdeklarators.

Die entsprechenden Deklarationen zum Sichtbarmachen von Variablen in anderen Quelldateien werden unter Speicherklassen beschrieben. Allerdings sind die Variablen und Funktionen, die auf der externen Ebene mit dem static -Speicherklassenspezifizierer deklariert werden, nur innerhalb der Quelldatei sichtbar, in der sie definiert sind. Alle anderen Funktionen sind global sichtbar.

Siehe auch

Lebensdauer, Bereich, Sichtbarkeit und Verknüpfung