Klasy magazynu w języku C
"Klasa magazynu" zmiennej określa, czy element ma okres istnienia "globalny", czy "lokalny". Język C wywołuje te dwa okresy istnienia "statyczne" i "automatyczne". Element o globalnym okresie istnienia istnieje i ma wartość w trakcie wykonywania programu. Wszystkie funkcje mają okresy istnienia globalne.
Zmienne automatyczne lub zmienne z okresami istnienia lokalnego są przydzielane nowe magazyny za każdym razem, gdy kontrolka wykonywania przechodzi do bloku, w którym są zdefiniowane. Gdy wykonywanie zwraca, zmienne nie mają już znaczących wartości.
Język C udostępnia następujące specyfikatory klasy magazynu:
Składnia
storage-class-specifier
:
auto
register
static
extern
typedef
__declspec (
extended-decl-modifier-seq
)
/* Specyficzne dla firmy Microsoft */
Z wyjątkiem parametru __declspec
declaration-specifier
można użyć tylko jednego storage-class-specifier
elementu w deklaracji w deklaracji . Jeśli nie zostanie wykonana żadna specyfikacja klasy magazynu, deklaracje w bloku tworzą obiekty automatyczne.
Elementy zadeklarowane za pomocą specyfikatora auto
lub register
mają lokalne okresy istnienia. Elementy zadeklarowane za pomocą specyfikatora static
lub extern
mają okresy istnienia globalne.
Ponieważ typedef
i __declspec
są semantycznie różne od pozostałych czterech storage-class-specifier
terminali, są one omawiane oddzielnie. Aby uzyskać szczegółowe informacje na temat typedef
programu , zobacz typedef
Deklaracje. Aby uzyskać szczegółowe informacje na temat __declspec
programu , zobacz Extended Storage-Class Attributes (Rozszerzone atrybuty klasy magazynu).
Umieszczanie deklaracji zmiennych i funkcji w plikach źródłowych wpływa również na klasę magazynu i widoczność. Deklaracje poza wszystkimi definicjami funkcji są wyświetlane na "poziomie zewnętrznym". Deklaracje w definicjach funkcji są wyświetlane na "poziomie wewnętrznym".
Dokładne znaczenie każdego specyfikatora klasy magazynu zależy od dwóch czynników:
Określa, czy deklaracja pojawia się na poziomie zewnętrznym, czy wewnętrznym
Określa, czy zadeklarowany element jest zmienną, czy funkcją
Specyfikatory klasy magazynu dla deklaracji na poziomie zewnętrznym i specyfikatorów klasy magazynu dla deklaracji na poziomie wewnętrznym opisują storage-class-specifier
terminale w każdym rodzaju deklaracji i wyjaśnić domyślne zachowanie, gdy storage-class-specifier
zostanie pominięty ze zmiennej. Specyfikatory klasy magazynu z deklaracjami funkcji omawia specyfikatory klasy magazynu używane z funkcjami.