V tomto kurzu se dozvíte o rozsahu a životnosti místních a globálních proměnných. Dozvíte se také statické a registrační proměnné.
Každá proměnná v programování C má dvě vlastnosti: typ a třídu úložiště.
Typ odkazuje na datový typ proměnné. Třída úložiště určuje rozsah, viditelnost a životnost proměnné.
Existují 4 typy třídy úložiště:
- automatický
- externí
- statický
- Registrovat
Místní proměnná
Proměnné deklarované uvnitř bloku jsou automatické nebo místní proměnné. Místní proměnné existují pouze uvnitř bloku, ve kterém je deklarována.
Vezměme si příklad.
#include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )
Při spuštění výše uvedeného programu se zobrazí chybový nedeklarovaný identifikátor i. Je to proto, že i je deklarováno uvnitř for
bloku smyčky. Mimo blok je to nehlášené.
Vezměme si další příklad.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
Ve výše uvedeném příkladu je n1 lokální main()
a n2 je lokální func()
.
To znamená, že nemáte přístup k proměnné n1 uvnitř, func()
protože existuje pouze uvnitř main()
. Podobně nemůžete přistupovat k proměnné n2 uvnitř, main()
protože existuje pouze uvnitř func()
.
Globální proměnná
Proměnné, které jsou deklarovány mimo všechny funkce, se označují jako externí nebo globální proměnné. Jsou přístupné z jakékoli funkce uvnitř programu.
Příklad 1: Globální proměnná
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Výstup
n = 7
Předpokládejme, že globální proměnná je deklarována v file1
. Pokud se pokusíte použít tuto proměnnou v jiném souboru file2
, kompilátor si stěžuje. K vyřešení tohoto problému se klíčové slovo extern
používá file2
k označení, že externí proměnná je deklarována v jiném souboru.
Registrovat proměnnou
register
Klíčové slovo se používá k deklarovat registru proměnné. Registrované proměnné měly být rychlejší než lokální proměnné.
Moderní kompilátory jsou však velmi dobré v optimalizaci kódu a existuje vzácná šance, že díky použití proměnných registru bude váš program rychlejší.
Pokud nepracujete na vestavěných systémech, kde víte, jak optimalizovat kód pro danou aplikaci, není použití proměnných registrů k dispozici.
Statická proměnná
Statická proměnná je deklarována pomocí static
klíčového slova. Například;
statický int i;
Hodnota statické proměnné přetrvává až do konce programu.
Příklad 2: Statická proměnná
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Výstup
6 11
Během prvního volání funkce je hodnota c inicializována na 1. Jeho hodnota se zvýší o 5. Nyní je hodnota c 6, což je vytištěno na obrazovce.
Během druhého volání funkce se c znovu neinicializuje na 1. Je to proto, že c je statická proměnná. Hodnota c se zvýší o 5. Nyní bude její hodnota 11, která se vytiskne na obrazovce.