Zakres i widoczność
Widoczność identyfikatora określa części programu, w których można się do niego odwoływać (jego "zakres"). Identyfikator jest widoczny (na przykład, może zostać użyty) tylko w częściach programu wchodzących w skład jego "zakresu", który może być ograniczony (w celu zwiększenia restrykcyjności) do pliku, funkcji, bloku lub prototypu funkcji, w którym się pojawia.Zakres identyfikatora jest częścią programu, w której nazwa może być używana.Jest to czasami nazywane "zakresem słownikowym". Istnieją cztery rodzaje zakresów: funkcji, pliku, bloku i prototypu funkcji.
Wszystkie identyfikatory z wyjątkiem etykiet mają zakres uzależniony od poziomu, na którym występuje deklaracja.Dla każdego rodzaju zakresu widocznością identyfikatorów w programie rządzą następujące zasady:
Zakres pliku
Deklarator lub specyfikator typu dla identyfikatora z zakresem pliku pojawia się poza każdym blokiem lub listą parametrów i jest dostępny z dowolnego miejsca w jednostce tłumaczenia po jej deklaracji.Nazwy identyfikatorów z zakresem pliku są często nazywane "global" lub "external". Zakres globalnego identyfikatora rozpoczyna się w miejscu jego definicji lub deklaracji i kończy się na końcu jednostki tłumaczenia.Zakres funkcji
Etykieta jest jedynym rodzajem identyfikatora, który ma zakres funkcji.Etykieta jest niejawnie zadeklarowana przez jej użycie w instrukcji.Nazwy etykiet muszą być unikatowe w obrębie danej funkcji. (Aby uzyskać więcej informacji dotyczących etykiet i nazw etykiet, zobacz Goto i instrukcje oznaczone.)Zakres bloku
Deklarator lub specyfikator typu dla identyfikatora z zakresem bloku pojawia się wewnątrz bloku lub listy deklaracji parametrów formalnych w definicji funkcji.Jest widoczny tylko od punktu jego deklaracji lub definicji do końca bloku, zawierającego jego deklarację lub definicję.Jej zakres jest ograniczony do tego bloku i wszelkich bloków zagnieżdżonych w tym bloku i kończy się nawiasem klamrowym, który zamyka skojarzony blok.Takie identyfikatory są czasami nazywane "zmiennymi lokalnymi".Zakres prototypu funkcji
Deklarator lub specyfikator typu dla identyfikatora z zakresem prototypu funkcji pojawia się w obrębie listy deklaracji parametrów prototypu funkcji (nie jest częścią deklaracji funkcji).Jej zakres kończy się z końcem deklaratora funkcji.
Właściwe deklaracje do tworzenia zmiennych widocznych w innych plikach źródłowych są opisane w artykule Klasy magazynujące.Jednakże, zmienne i funkcje zadeklarowane na zewnętrznym poziomie ze specyfikatorem klasy magazynującej static są widoczne tylko w tym pliku źródłowym, w którym są zdefiniowane.Wszystkie pozostałe funkcje są widoczne globalnie.