Dela via


C Storage-klasser

"Lagringsklassen" för en variabel avgör om objektet har en "global" eller "lokal" livslängd. C kallar dessa två livslängder för "statiska" och "automatiska". Ett objekt med en global livslängd finns och har ett värde under hela körningen av programmet. Alla funktioner har global livslängd.

Automatiska variabler, eller variabler med lokal livslängd, allokeras ny lagring varje gång körningskontrollen skickas till blocket där de definieras. När körningen returnerar har variablerna inte längre meningsfulla värden.

C tillhandahåller följande storage-class-specificerare:

Syntax

storage-class-specifier:
auto
register
static
extern
typedef
__declspec ( extended-decl-modifier-seq ) /* Microsoft-specifik */

__declspecFörutom kan du bara använda en storage-class-specifier i declaration-specifier en deklaration. Om ingen lagringsklassspecifikation görs skapar deklarationer inom ett block automatiska objekt.

Objekt som deklareras med auto eller register specificeraren har lokal livslängd. Objekt som deklareras med static eller extern specificeraren har global livslängd.

Eftersom typedef och __declspec skiljer sig semantiskt från de andra fyra storage-class-specifier terminalerna diskuteras de separat. Specifik information om typedeffinns i typedef Deklarationer. Specifik information om __declspecfinns i Extended Storage-Class Attributes (Utökade Storage-Class-attribut).

Placeringen av variabel- och funktionsdeklarationer i källfiler påverkar också lagringsklassen och synligheten. Deklarationer utanför alla funktionsdefinitioner sägs visas på "extern nivå". Deklarationer inom funktionsdefinitioner visas på "intern nivå".

Den exakta innebörden av varje storage-class-specificerare beror på två faktorer:

  • Om deklarationen visas på extern eller intern nivå

  • Om objektet som deklareras är en variabel eller en funktion

Storage-Class-specificerare för External-Level-deklarationer och Storage-Class-specificerare för Internal-Level-deklarationer beskriver storage-class-specifier terminalerna i varje typ av deklaration och förklarar standardbeteendet när storage-class-specifier den utelämnas från en variabel. Storage-Class-specificerare med funktionsdeklarationer diskuterar lagringsklassspecificerare som används med funktioner.

Se även

Deklarationer och typer