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,

  1. Selectați Aplicație de consolă
  2. Faceți clic pe Go

Clasa de stocare externă în C

Pas 2) Selectați C și faceți clic pe Următorul

Clasa de stocare externă în C

Pas 3) Faceți clic pe Următorul

Clasa de stocare externă în C

Pas 4) Introduceți detalii și faceți clic pe Următorul

Clasa de stocare externă în C

Pas 5) Faceți clic pe Finalizare

Clasa de stocare externă în C

Pas 6) Puneți codul principal așa cum se arată în programul anterior în fișierul main.c și salvați-l

Clasa de stocare externă în C

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.

Clasa de stocare externă în C

Pas 8) Puneți și salvați codul C al fișierului original.c prezentat în exemplul anterior fără funcția main().

Clasa de stocare externă în C

Pas 9) Construiește și rulează proiectul tău. Rezultatul este prezentat în figura următoare

Clasa de stocare externă în C

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.