Třídy úložiště v C: Auto, Exter, Static, Register (Příklady)
Co je třída úložiště v C?
Třída úložiště představuje viditelnost a umístění proměnné. Říká, z jaké části kódu můžeme přistupovat k proměnné. Třída úložiště v C se používá k popisu následujících věcí:
- Variabilní rozsah.
- Místo, kde bude proměnná uložena.
- Inicializovaná hodnota proměnné.
- Životnost proměnné.
- Kdo má přístup k proměnné?
Třída úložiště se tedy používá k reprezentaci informací o proměnné.
POZNÁMKA: Proměnná není spojena pouze s a datový typ, svou hodnotu, ale také skladovací třídu.
Jaké jsou typy tříd úložiště v C?
Existují celkem čtyři typy standardních tříd úložiště. Níže uvedená tabulka představuje třídy úložiště v C.
Třída úložiště | Účel |
---|---|
auto | Je to výchozí třída úložiště. |
externí | Je to globální proměnná. |
statický | Je to lokální proměnná, která je schopna vracet hodnotu, i když je řízení přeneseno na volání funkce. |
registrovat se | Je to proměnná, která je uložena v registru. |
Třída automatického ukládání v C
Proměnné definované pomocí třídy auto storage se nazývají lokální proměnné. Auto znamená třídu automatického ukládání. Proměnná je standardně ve třídě automatického ukládání, pokud není explicitně specifikována.
Rozsah automatické proměnné je omezen pouze na konkrétní blok. Jakmile ovládací prvek opustí blok, přístup je zničen. To znamená, že k ní má přístup pouze blok, ve kterém je proměnná auto deklarována.
Klíčové slovo auto se používá k definování třídy automatického ukládání. Ve výchozím nastavení obsahuje proměnná auto hodnotu nesmyslu.
Example, auto int age;
Níže uvedený program definuje funkci se dvěma lokálními proměnnými
int add(void) { int a=13; auto int b=48; return a+b;}
Vezmeme další program, který ukazuje úroveň rozsahu „úroveň viditelnosti“ pro automatické proměnné v každém kódu bloku, které jsou na sobě nezávislé:
#include <stdio.h> int main( ) { auto int j = 1; { auto int j= 2; { auto int j = 3; printf ( " %d ", j); } printf ( "\t %d ",j); } printf( "%d\n", j);}
VÝSTUP:
3 2 1
Třída externího úložiště v C
Extern znamená třídu externího úložiště. Třída externího úložiště se používá, když máme globální funkce nebo proměnné, které jsou sdíleny mezi dvěma nebo více soubory.
Klíčové slovo externí se používá k deklaraci globální proměnné nebo funkce v jiném souboru, aby poskytl odkaz na proměnnou nebo funkci, které již byly definovány v původním souboru.
Proměnné definované pomocí klíčového slova extern se nazývají globální proměnné. Tyto proměnné jsou přístupné v celém programu. Všimněte si, že externí proměnnou nelze inicializovat, byla již definována v původním souboru.
Example, extern void display();
První soubor: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Druhý soubor: original.c
#include <stdio.h> i=48;
Výsledek:
value of the external integer is = 48
Chcete-li zkompilovat a spustit výše uvedený kód, postupujte podle níže uvedených kroků
Krok 1) Vytvořit nový projekt,
- Vyberte Aplikace konzoly
- Klikněte na tlačítko Přejít
Krok 2) Vyberte C a klikněte na Další
Krok 3) Klepněte na tlačítko Další
Krok 4) Zadejte podrobnosti a klikněte na Další
Krok 5) Klepněte na tlačítko Dokončit
Krok 6) Vložte hlavní kód podle předchozího programu do souboru main.c a uložte jej
Krok 7) Vytvořte nový soubor C [File -> new -> Empty File , uložte (jako original.c) a přidejte jej do aktuálního projektu kliknutím na „OK“ v dialogovém okně.
Krok 8) Vložte a uložte C kód souboru original.c ukázaného v předchozím příkladu bez funkce main().
Krok 9) Sestavte a spusťte svůj projekt. Výsledek je znázorněn na následujícím obrázku
Třída statického úložiště v C
Statické proměnné se používají v rámci funkce/souboru jako lokální statické proměnné. Mohou být také použity jako a globální proměnná
- Statická lokální proměnná je lokální proměnná, která uchovává a ukládá svou hodnotu mezi voláním funkce nebo blokem a zůstává viditelná pouze pro funkci nebo blok, ve kterém je definována.
- Statické globální proměnné jsou viditelné globální proměnné pouze do souboru, ve kterém je deklarován.
Example: static int count = 10;
Mějte na paměti, že statická proměnná má výchozí počáteční hodnotu nula a je inicializována pouze jednou za dobu své existence.
#include <stdio.h> /* function declaration */ void next(void); static int counter = 7; /* global variable */ main() { while(counter<10) { next(); counter++; } return 0;} void next( void ) { /* function definition */ static int iteration = 13; /* local static variable */ iteration ++; printf("iteration=%d and counter= %d\n", iteration, counter);}
Výsledek:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Globální proměnné jsou přístupné v celém souboru, zatímco statické proměnné jsou přístupné pouze pro konkrétní část kódu.
Životnost statické proměnné je v celém kódu programu. Proměnná, která je deklarována nebo inicializována pomocí statického klíčového slova, vždy obsahuje nulu jako výchozí hodnotu.
Zaregistrujte třídu úložiště v C
Třídu úložiště registrů můžete použít, když chcete místo toho ukládat místní proměnné v rámci funkcí nebo bloků v registrech CPU RAM abyste měli rychlý přístup k těmto proměnným. Dobrým kandidátem pro uložení do registru jsou například „počítadla“.
Example: register int age;
Klíčové slovo registrovat se se používá k deklaraci třídy úložiště registru. Proměnné deklarované pomocí třídy úložiště registru mají životnost v celém programu.
Je podobná třídě automatického ukládání. Proměnná je omezena na konkrétní blok. Jediný rozdíl je v tom, že proměnné deklarované pomocí třídy úložiště registrů jsou uloženy uvnitř registrů CPU namísto paměti. Registr má rychlejší přístup než hlavní paměť.
Proměnné deklarované pomocí třídy úložiště registru nemají žádnou výchozí hodnotu. Tyto proměnné jsou často deklarovány na začátku programu.
#include <stdio.h> /* function declaration */ main() { {register int weight; int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/} }
VÝSTUP:
error: address of register variable 'weight' requested
Následující tabulka shrnuje hlavní vlastnosti každé třídy úložiště, které se běžně používají v programování v jazyce C
Třída úložiště | Prohlášení | Skladování | Výchozí počáteční hodnota | Rozsah | Život |
---|---|---|---|---|---|
auto | Uvnitř funkce/bloku | Memory | Nepředvídatelné | V rámci funkce/bloku | V rámci funkce/bloku |
registrovat se | Uvnitř funkce/bloku | Registry CPU | Odpadky | V rámci funkce/bloku | V rámci funkce/bloku |
externí | Mimo všechny funkce | Memory | Nulu | Celý soubor a další soubory, kde je proměnná deklarována jako externí | běh programu |
Statické (místní) | Uvnitř funkce/bloku | Memory | Nulu | V rámci funkce/bloku | běh programu |
Statické (globální) | Mimo všechny funkce | Memory | Nulu | Globální | běh programu |
Shrnutí
V tomto tutoriálu jsme diskutovali o třídách úložiště v C, abychom to shrnuli:
- Třída úložiště v C se používá k reprezentaci dalších informací o proměnné.
- Třída úložiště představuje rozsah a životnost proměnné.
- Také říká, kdo a odkud může přistupovat k proměnné?
- Auto, extern, register, static jsou čtyři různé třídy úložiště v programu C.
- Specifikátor třídy úložiště v Jazyk C se používá k definování proměnných, funkcí a parametrů.
- auto se používá pro lokální proměnnou definovanou v rámci bloku nebo funkce
- Registr se používá k uložení proměnné do registrů CPU, místo do paměti pro rychlý přístup.
- Statické se používá pro globální i lokální proměnné. Každý z nich má svůj případ použití v programu C.
- Extern se používá pro sdílení dat mezi soubory projektu C.