Clasele de stocare în C: diferite tipuri de clase de stocare [cu exemple]
Publicat: 2020-10-21Codarea cu C este foarte centrată pe utilizarea variabilelor în fiecare program. Acestea sunt aspectele cheie ale programării C. Fiecare variabilă din C are două proprietăți; tip și clase de depozitare. Printre acestea, tipul se referă la tipul de date al variabilei, iar clasele de stocare în C determină domeniul de aplicare, durata de viață și vizibilitatea variabilei. Clasele de stocare în C sunt folosite pentru a găsi durata de viață, vizibilitatea, locația de memorie și valoarea inițială a unei variabile.
În această postare pe blog, vom avea o privire detaliată asupra claselor de stocare în C , a tipurilor sale și a modului în care caracteristicile sale influențează rezultatul programului cu câteva exemple de programare. O clasă de stocare în C este folosită pentru a reprezenta informațiile unei variabile.
Învață să construiești aplicații precum Swiggy, Quora, IMDB și multe altele
Cuprins
Ce sunt clasele de stocare în C?
Clasele de stocare în C alocă zona de stocare a unei variabile care va fi reținută în memorie. Sunt stocate în memoria RAM a unui sistem. În afară de spațiul de stocare, ele determină domeniul de aplicare al unei variabile. Variabilele din programul C sunt stocate într-o locație fizică din memoria aleatorie, care este în principal memoria dispozitivului și registrele CPU.
Clasele de stocare în C definesc, de asemenea, durata de viață a variabilei și o denumesc „local” sau „global”. Clasele de stocare sunt, de asemenea, utile pentru a defini domeniul sau vizibilitatea și valoarea inițială a variabilei. Există în principal patru clase de stocare în C , adică. automat , registru , static și extern . Vom discuta fiecare câte unul în continuare.
Cum sunt declarate clasele de stocare în C?
Cele patru clase de stocare din C sunt declarate într-un bloc sau program cu specificatorii clasei de stocare, auto, register, extern, static. Mai există un specificator de clasă de stocare, „typedef” utilizat în forma sintactică și nu rezervă spațiu de stocare. Specificatorii instruiesc compilatorul cu privire la stocarea variabilelor. Clasa de stocare externă din C îi spune compilatorului că variabila definită este declarată cu o legătură externă.

Există o diferență cheie între definirea și declararea unei variabile. Definirea unei variabile înseamnă alocarea memoriei pentru variabilă și declararea acesteia înseamnă inițializarea acesteia cu o valoare.
Sintaxă:
specificator_clasă_stocare tip_date nume_variabilă;
Citiți: Idei și subiecte interesante de proiecte în C# pentru începători
Caz special: Când nu este declarat sau definit niciun specificator de clasă de stocare într-un program
Există cel puțin un specificator de clasă de stocare este dat în declarația variabilei. Dar, în cazul în care nu este specificat nici un specificator de clasă de stocare, se respectă următoarele reguli:
1. Variabilele declarate în cadrul unei funcții sunt considerate auto.
2. Funcțiile declarate în cadrul unei funcții sunt considerate extern.
3. Variabilele și funcțiile declarate în afara unei funcții sunt considerate statice, cu legătură externă .
Care sunt tipurile de clase de stocare în C?
Există patru clase de stocare în C , să aruncăm o privire la ele:
1. Clasele de stocare automată în C
Fiecare variabilă definită într-o funcție sau bloc aparține implicit clasei de stocare automată dacă nu este menționată nicio clasă de stocare. Variabilele unei funcții sau bloc aparțin clasei de stocare automată sunt declarate cu specificatorul auto. Variabilele sub auto în C sunt locale blocului în care sunt definite și sunt eliminate în afara blocului.

Un program simplu care arată clasele de stocare automată:
#include <stdio.h>
int main( )
{
auto int i = 11;
{
auto int i = 22;
{
auto int i = 33;
printf ( „%d „, i);
}
printf ( „%d „, i);
}
printf ( „%d”, i);
}
Rezultatul programului:
3 2 1
Explicaţie:
În programul de mai sus, există de trei ori variabila i este declarată. Variabilele cu același nume pot fi definite în blocuri diferite. Astfel, acest program se va compila și se va executa cu succes fără nicio eroare. Funcția „printf” din blocul cel mai interior va tipări 3 și variabila i din acest bloc va fi distrusă după ce blocul se termină.
Următorul, al doilea bloc exterior tipărește 2 care este apoi urmat de blocul exterior care tipărește 1. Variabilele automate sunt inițializate corespunzător; altfel, veți obține valori nedefinite, deoarece compilatorul nu le oferă o valoare inițială.
2. Înregistrați clasele de stocare în C
Variabilele aparținând unei clase de stocare a registrelor sunt echivalente cu auto în C dar sunt stocate în registrele CPU și nu în memorie, de unde și numele. Ei sunt cei accesați frecvent. Specificatorul de registru este folosit pentru a declara variabila clasei de stocare a registrului. Variabilele unei clase de stocare a registrului sunt locale blocului unde sunt definite și distruse când blocul se termină.
Un program simplu care arată clasele de stocare a registrului:
#include <stdio.h>
int main()
{
înregistrare int i = 10;
int *p = &i; //eroare: adresa variabilei de registru solicitată
printf („Valoarea lui i: %d”, *p);
printf („Adresa lui i: %u”, p);
}
Explicaţie:
În programul de mai sus, codul încearcă să introducă adresa variabilei i în variabila pointer p, dar deoarece i este declarat ca o variabilă de registru, codul nu se va compila și va afișa eroarea „Eroare: adresa variabilei de registru solicitată” .
Doar anumite tipuri de variabile sunt plasate în registre. Variabilele de registru nu primesc o valoare inițială de către compilator.
Aflați: C++ vs Java: Diferența dintre C++ și Java
3. Clasele de stocare statică în C
Vizibilitatea variabilelor statice este zero în afara funcției sau fișierului lor, dar valorile lor sunt menținute între apeluri. Variabilele cu clasa de stocare statică sunt declarate cu specificatorul static. Variabilele statice sunt într-o funcție sau fișier. Specificatorul static funcționează diferit cu variabilele locale și globale.
Programe simple care arată clase de stocare statică cu variabile locale și globale:
i. Variabila locala
#include <stdio.h>
void staticDemo()
{
static int i;
{
static int i = 1;
printf („%d”, i);
i++;
}
printf („%d”, i);
i++;
}
int main()
{
staticDemo();
staticDemo();
}
Rezultatul programului:
1 0
2 1
Explicaţie:
Când o variabilă locală este definită de un specificator static, în interiorul unei funcții sau bloc, spațiul de stocare permanent este creat în compilator. Variabila locală statică este vizibilă pentru funcția sau blocul în care este specificată și își păstrează valoarea între apelurile de funcție. În programul de mai sus, variabila statică i este definită în două locuri în două blocuri în interiorul funcției staticDemo(). staticDemo() este numit doi în funcția principală. În apelul următor, variabilele statice își păstrează vechile valori și nu trebuie să fie inițializate din nou.
ii. Variabilă globală
#include <stdio.h>
static int gInt = 1;
static void staticDemo()
{
static int i;
printf („%d”, i);
i++;
printf („%d”, globalInt);
globalInt++;
}
int main()
{
staticDemo();
staticDemo();
}
Rezultatul programului:
0 1
1 2
Explicaţie:
Variabilele statice trebuie inițializate o singură dată într-un program și sunt păstrate pe toată durata vieții. Au o valoare inițială implicită zero.
Când o variabilă sau o funcție globală este definită de un specificator static, atunci acea variabilă sau funcție este cunoscută numai de fișierul în care este definită. Pentru o variabilă globală, alte rutine de fișier nu pot accesa și modifica conținutul acesteia, deoarece o variabilă globală statică are o legătură internă. În programul de mai sus, variabila globală statică globalInt și o funcție statică staticDemo(), sunt definite ca statice și nu pot fi utilizate în afara fișierului C.
4. Clasele de stocare externă în C
Variabilele sau funcțiile clasei de stocare externă sunt declarate de specificatorul „extern”. Când o variabilă este declarată cu un specificator extern, variabilei nu i se alocă spațiu de stocare și se presupune că aceasta a fost deja definită în altă parte a programului. Cu un specificator extern, variabila nu este inițializată. Motivul pentru care extern este folosit pentru a specifica o variabilă într-un program pentru a o declara cu o legătură externă.
Un program simplu care arată clase de stocare externă:
#include <stdio.h>
extern int i;
int main()
{
printf („i: %d”, i);
}
int i = 1;
Explicaţie:

În programul C de mai sus, dacă extern int i este eliminat, va apărea o eroare „Identificator nedeclarat „i” deoarece variabila i este definită după ce a fost utilizată în printf. Specificatorul extern indică compilatorului că variabila i a fost definită și este declarată aici.
Dacă schimbați extern int i; to extern int i = 5; veți primi o eroare „Redefinirea lui „i”” deoarece specificatorul extern nu inițializează o variabilă.
Citește și: Top 7 idei de proiecte interesante în C pentru începători
Cuvinte finale
Acest articol detaliază conceptul de clase de stocare în C și vă spune cum diferă tipurile sale unele de altele. Când să utilizați o anumită clasă de stocare depinde de atribuire și de domeniul, durata de viață și vizibilitatea variabilei cu care aveți de-a face.
Dacă sunteți interesat să aflați mai multe și aveți nevoie de mentorat de la experții din industrie, consultați Diploma PG de la upGrad și IIIT Banglore în Dezvoltare Software Full-Stack .
