Udostępnij za pośrednictwem


Klasy magazynu w języku C

"Klasa magazynu" zmiennej określa, czy element ma "globalny" czy "lokalny" okres istnienia. Język C wywołuje te dwa okresy istnienia "statyczne" i "automatyczne". Element z okresem istnienia globalnego istnieje i ma wartość w trakcie wykonywania programu. Wszystkie funkcje mają globalne okresy istnienia.

Zmienne automatyczne lub zmienne z okresami istnienia lokalnego są przydzielane nowemu magazynowi za każdym razem, gdy kontrolka wykonywania przechodzi do bloku, w którym są zdefiniowane. Po powrocie wykonywania 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) /* Specyficzny dla firmy Microsoft */

Z wyjątkiem funkcji __declspec, można użyć tylko jednej storage-class-specifier w declaration-specifier 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ą globalne okresy istnienia.

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 typedefprogramu, zobacz typedef Deklaracje. Aby uzyskać szczegółowe informacje na temat __declspecprogramu , zobacz Rozszerzone atrybuty Storage-Class.

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:

  • 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 External-Level i specyfikatorów klasy magazynowania dla deklaracji Internal-Level opisują storage-class-specifier terminale w każdym rodzaju deklaracji i wyjaśniają domyślne zachowanie, gdy storage-class-specifier zmienna zostanie pominięta. Specyfikatory klasy magazynu z deklaracjami funkcji omawia specyfikatory klasy magazynu używane z funkcjami.

Zobacz też

Deklaracje i typy