Ebben az oktatóanyagban megismerheti a helyi és globális változók hatókörét és élettartamát. Ezenkívül megismerheti a statikus és regisztrációs változókat.
A C programozás minden változójának két tulajdonsága van: típus és tároló osztály.
A Type a változó adattípusára vonatkozik. A tárolási osztály határozza meg a változó hatókörét, láthatóságát és élettartamát.
4 típusú tárolási osztály létezik:
- automatikus
- külső
- statikus
- Regisztráció
Helyi változó
A blokkon belül deklarált változók automatikus vagy helyi változók. A helyi változók csak abban a blokkban léteznek, amelyben deklarálva vannak.
Vegyünk egy példát.
#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; )
A fenti program futtatásakor hibaüzenetet kap az i nem bejelentett azonosítóval. Ez azért van, mert én a hurokblokkban van deklarálva for
. A blokkon kívül nem bejelentett.
Vegyünk egy másik példát.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
A fenti példában n1 lokális main()
és n2 lokális func()
.
Ez azt jelenti, hogy a belső n1 változóhoz nem férhet hozzá func()
, mivel csak belül létezik main()
. Hasonlóképpen nem férhet hozzá a benne lévő n2 változóhoz, main()
mivel az csak belül létezik func()
.
Globális változó
Az összes függvényen kívül deklarált változókat külső vagy globális változóknak nevezzük. A programon belül bármely funkcióból elérhetőek.
1. példa: Globális változó
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Kimenet
n = 7
Tegyük fel, hogy egy globális változó deklarálva van file1
. Ha megpróbálja használni ezt a változót egy másik fájlban file2
, akkor a fordító panaszt fog tenni. A probléma megoldására, kulcsszó extern
használják file2
, jelezve, hogy a külső változó deklarált másik fájlt.
Regisztrálja a változót
A register
kulcsszó a regiszterváltozók deklarálására szolgál. Állítólag a regiszter változók gyorsabbak voltak, mint a helyi változók.
A modern fordítók azonban nagyon jók a kódoptimalizálásban, és ritka az esély, hogy a regiszterváltozók használatával a program gyorsabb lesz.
Hacsak nem olyan beágyazott rendszereken dolgozik, ahol tudja, hogyan kell optimalizálni a kódot az adott alkalmazáshoz, a regiszterváltozók nem használhatók.
Statikus változó
A statikus változó deklarálása a static
kulcsszó használatával történik. Például;
statikus int i;
A statikus változó értéke a program végéig fennmarad.
2. példa: Statikus változó
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Kimenet
6 11
Az első függvényhívás során a c értéke 1-re inicializálódik. Értéke 5-vel növekszik. Most c értéke 6, amelyet a képernyő kinyomtat.
A második funkcióhívás során c nem inicializálódik újra 1-re. Ez azért van, mert c statikus változó. A c értéket 5-gyel növeljük. Most az értéke 11 lesz, amelyet a képernyőre nyomtatunk.