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 typedef
programu, zobacz typedef
Deklaracje. Aby uzyskać szczegółowe informacje na temat __declspec
programu , 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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla