U ovom vodiču naučit ćete o opsegu i vijeku trajanja lokalnih i globalnih varijabli. Također, naučit ćete o statičkim i registracijskim varijablama.
Svaka varijabla u programiranju na C ima dva svojstva: tip i klasu pohrane.
Tip se odnosi na tip podataka varijable. Klasa pohrane određuje opseg, vidljivost i vijek trajanja varijable.
Postoje 4 vrste klase pohrane:
- automatski
- vanjski
- statički
- Registar
Lokalna varijabla
Varijable deklarirane unutar bloka su automatske ili lokalne varijable. Lokalne varijable postoje samo unutar bloka u kojem su deklarirane.
Uzmimo primjer.
#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; )
Kada pokrenete gornji program, dobit ćete pogrešku neprijavljeni identifikator i. To je zato što je i deklariran unutar for
bloka petlje. Izvan bloka je neprijavljeno.
Uzmimo još jedan primjer.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
U gornjem primjeru, n1 je lokalno za, main()
a n2 je lokalno za func()
.
To znači da ne možete pristupiti n1 varijabli iznutra func()
jer ona postoji samo iznutra main()
. Slično tome, ne možete pristupiti n2 varijabli iznutra main()
jer ona postoji samo iznutra func()
.
Globalna varijabla
Varijable koje su deklarirane izvan svih funkcija poznate su kao vanjske ili globalne varijable. Dostupni su iz bilo koje funkcije unutar programa.
Primjer 1: Globalna varijabla
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Izlaz
n = 7
Pretpostavimo da je globalna varijabla deklarirana u file1
. Ako pokušate upotrijebiti tu varijablu u drugoj datoteci file2
, sastavljač će se žaliti. Da bi se riješio ovaj problem, ključna riječ extern
koristi se file2
za označavanje da je vanjska varijabla deklarirana u drugoj datoteci.
Registriraj varijablu
register
Ključna riječ se koristi da se proglasi registara varijabli. Registracijske varijable trebale su biti brže od lokalnih varijabli.
Međutim, moderni kompajleri vrlo su dobri u optimizaciji koda, a rijetka je šansa da će upotreba varijabli registra ubrzati vaš program.
Ako ne radite na ugrađenim sustavima u kojima znate kako optimizirati kod za danu aplikaciju, neće se koristiti varijable registra.
Statička varijabla
Statička varijabla deklarira se pomoću static
ključne riječi. Na primjer;
statički int i;
Vrijednost statičke varijable zadržava se do kraja programa.
Primjer 2: Statička varijabla
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Izlaz
6 11
Tijekom prvog poziva funkcije, vrijednost c se inicijalizira na 1. Njegova vrijednost se povećava za 5. Sada je vrijednost c 6, koja se ispisuje na ekranu.
Tijekom drugog poziva funkcije c se ponovno ne inicijalizira na 1. To je zato što je c statička varijabla. Vrijednost c povećava se za 5. Sada će njegova vrijednost biti 11, što je ispisano na zaslonu.