Udostępnij za pośrednictwem


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

Zobacz też

Deklaracje i typy