Clasele de stocare în C: Auto, Extern, Static, Register (Exemple)
Ce este clasa de stocare în C?
O clasă de stocare reprezintă vizibilitatea și locația unei variabile. Ne spune din ce parte a codului putem accesa o variabilă. O clasă de stocare în C este folosită pentru a descrie următoarele lucruri:
- Domeniul variabil.
- Locația în care va fi stocată variabila.
- Valoarea inițializată a unei variabile.
- O durată de viață a unei variabile.
- Cine poate accesa o variabilă?
Astfel, o clasă de stocare este utilizată pentru a reprezenta informația despre o variabilă.
NOTĂ: O variabilă nu este asociată doar cu a tip de date, valoarea sa dar și o clasă de stocare.
Care sunt tipurile de clase de stocare în C?
Există în total patru tipuri de clase de stocare standard. Tabelul de mai jos reprezintă clasele de stocare în C.
Clasa de depozitare | Scop |
---|---|
Auto | Este o clasă de stocare implicită. |
extern | Este o variabilă globală. |
static | Este o variabilă locală care este capabilă să returneze o valoare chiar și atunci când controlul este transferat la apelul funcției. |
Inregistreaza-te | Este o variabilă care este stocată într-un registru. |
Clasa de stocare automată în C
Variabilele definite folosind clasa de stocare automată sunt numite variabile locale. Auto înseamnă clasa de stocare automată. O variabilă se află în clasa de stocare automată în mod implicit dacă nu este specificată în mod explicit.
Sfera de aplicare a unei variabile automate este limitată numai cu un anumit bloc. Odată ce controlul iese din bloc, accesul este distrus. Aceasta înseamnă că numai blocul în care este declarată variabila auto îl poate accesa.
Un cuvânt cheie auto este folosit pentru a defini o clasă de stocare automată. În mod implicit, o variabilă automată conține o valoare de gunoi.
Example, auto int age;
Programul de mai jos definește o funcție cu două variabile locale
int add(void) { int a=13; auto int b=48; return a+b;}
Luăm un alt program care arată „nivelul de vizibilitate” la nivelul domeniului pentru variabilele automate din fiecare cod de bloc care sunt independent unul de celălalt:
#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);}
IEȘIRE:
3 2 1
Clasa de stocare externă în C
Extern înseamnă clasa de stocare externă. Clasa de stocare externă este folosită atunci când avem funcții globale sau variabile care sunt partajate între două sau mai multe fișiere.
Cuvânt cheie extern este folosit pentru a declara o variabilă sau o funcție globală într-un alt fișier pentru a furniza referința variabilei sau funcției care au fost deja definite în fișierul original.
Variabilele definite folosind un cuvânt cheie extern sunt numite variabile globale. Aceste variabile sunt accesibile pe tot parcursul programului. Observați că variabila extern nu poate fi inițializată, a fost deja definită în fișierul original.
Example, extern void display();
Primul fișier: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Al doilea dosar: original.c
#include <stdio.h> i=48;
Rezultat:
value of the external integer is = 48
Pentru a compila și a rula codul de mai sus, urmați pașii de mai jos
Pas 1) Creați un nou proiect,
- Selectați Aplicație de consolă
- Faceți clic pe Go
Pas 2) Selectați C și faceți clic pe Următorul
Pas 3) Faceți clic pe Următorul
Pas 4) Introduceți detalii și faceți clic pe Următorul
Pas 5) Faceți clic pe Finalizare
Pas 6) Puneți codul principal așa cum se arată în programul anterior în fișierul main.c și salvați-l
Pas 7) Creați un fișier C nou [Fișier -> nou -> Fișier gol, salvați (ca original.c) și adăugați-l la proiectul curent făcând clic pe „OK” în caseta de dialog.
Pas 8) Puneți și salvați codul C al fișierului original.c prezentat în exemplul anterior fără funcția main().
Pas 9) Construiește și rulează proiectul tău. Rezultatul este prezentat în figura următoare
Clasa de stocare statică în C
Variabilele statice sunt utilizate în funcție/fișier ca variabile statice locale. Ele pot fi folosite si ca a variabila globala
- Variabila locală statică este o variabilă locală care își păstrează și stochează valoarea între apelurile de funcție sau bloc și rămâne vizibilă numai pentru funcția sau blocul în care este definită.
- Variabilele globale statice sunt variabile globale vizibile numai la dosarul în care este declarată.
Example: static int count = 10;
Rețineți că variabila statică are o valoare inițială implicită zero și este inițializată o singură dată în timpul de viață.
#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);}
Rezultat:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Variabilele globale sunt accesibile în întregul fișier, în timp ce variabilele statice sunt accesibile numai pentru o anumită parte a unui cod.
Durata de viață a unei variabile statice este în întregul cod al programului. O variabilă care este declarată sau inițializată folosind cuvântul cheie static conține întotdeauna zero ca valoare implicită.
Înregistrați clasa de stocare în C
Puteți utiliza clasa de stocare a registrelor atunci când doriți să stocați variabile locale în funcții sau blocuri în registrele CPU în loc de RAM pentru a avea acces rapid la aceste variabile. De exemplu, „contoarele” sunt un bun candidat pentru a fi stocate în registru.
Example: register int age;
Cuvântul cheie Inregistreaza-te este folosit pentru a declara o clasă de stocare a registrului. Variabilele declarate folosind clasa de stocare a registrului au o durată de viață pe tot parcursul programului.
Este similar cu clasa de stocare automată. Variabila este limitată la un anumit bloc. Singura diferență este că variabilele declarate folosind clasa de stocare a registrului sunt stocate în registrele CPU în loc de memorie. Register are acces mai rapid decât cel al memoriei principale.
Variabilele declarate folosind clasa de stocare a registrului nu au o valoare implicită. Aceste variabile sunt adesea declarate la începutul unui program.
#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*/} }
IEȘIRE:
error: address of register variable 'weight' requested
Următorul tabel rezumă caracteristicile principale ale fiecărei clase de stocare care sunt utilizate în mod obișnuit în programarea C
Clasa de stocare | Declarație | Stocare | Valoarea inițială implicită | domeniu | Toată viața |
---|---|---|---|---|---|
Auto | În interiorul unei funcții/bloc | Memorie | Imprevizibil | În cadrul funcției/blocului | În cadrul funcției/blocului |
Inregistreaza-te | În interiorul unei funcții/bloc | Registrele CPU | Gunoi | În cadrul funcției/blocului | În cadrul funcției/blocului |
extern | În afara tuturor funcțiilor | Memorie | Zero | Întregul fișier și alte fișiere în care variabila este declarată extern | timpul de rulare a programului |
Static (local) | În interiorul unei funcții/bloc | Memorie | Zero | În cadrul funcției/blocului | timpul de rulare a programului |
Static (global) | În afara tuturor funcțiilor | Memorie | Zero | Caritate | timpul de rulare a programului |
Rezumat
În acest tutorial am discutat despre clasele de stocare în C, pentru a rezuma:
- O clasă de stocare în C este folosită pentru a reprezenta informații suplimentare despre o variabilă.
- Clasa de stocare reprezintă domeniul și durata de viață a unei variabile.
- De asemenea, spune cine poate accesa o variabilă și de unde?
- Auto, extern, register, static sunt cele patru clase de stocare diferite dintr-un program C.
- Un specificator de clasă de stocare în Limbajul C este folosit pentru a defini variabile, funcții și parametri.
- auto este folosit pentru o variabilă locală definită într-un bloc sau funcție
- registrul este folosit pentru a stoca variabila în registrele CPU mai degrabă locația de memorie pentru acces rapid.
- Static este utilizat atât pentru variabilele globale, cât și pentru variabilele locale. Fiecare are cazul său de utilizare în cadrul unui program C.
- Extern este folosit pentru partajarea datelor între fișierele de proiect C.