Klase pohrane u C-u: Auto, Extern, Static, Register (Primjeri)

ล to je klasa pohrane u C-u?

Klasa pohrane predstavlja vidljivost i lokaciju varijable. On govori iz kojeg dijela koda moลพemo pristupiti varijabli. Klasa pohrane u C-u koristi se za opisivanje sljedeฤ‡ih stvari:

  • Opseg varijable.
  • Mjesto gdje ฤ‡e varijabla biti pohranjena.
  • Inicijalizirana vrijednost varijable.
  • ลฝivotni vijek varijable.
  • Tko moลพe pristupiti varijabli?

Stoga se klasa pohrane koristi za predstavljanje informacija o varijabli.

NAPOMENA: Varijabla nije povezana samo s a tip podataka, njegovu vrijednost, ali i klasu skladiลกtenja.

Koje su vrste klasa pohrane u C-u?

Postoje ukupno ฤetiri vrste standardnih klasa skladiลกtenja. Donja tablica predstavlja klase pohrane u C.

Klasa skladiลกtenja Svrha
automobil To je zadana klasa pohrane.
vanjski To je globalna varijabla.
statiฤki To je lokalna varijabla koja moลพe vratiti vrijednost ฤak i kada se kontrola prenese na poziv funkcije.
Registrirajte se To je varijabla koja je pohranjena unutar registra.

Klasa automatskog skladiลกtenja u C

Varijable definirane pomoฤ‡u klase automatskog pohranjivanja nazivaju se lokalnim varijablama. Auto oznaฤava klasu automatskog skladiลกtenja. Varijabla je prema zadanim postavkama u klasi automatske pohrane ako nije eksplicitno navedena.

Opseg automatske varijable ograniฤen je samo odreฤ‘enim blokom. Jednom kada kontrola izaฤ‘e iz bloka, pristup je uniลกten. To znaฤi da joj samo blok u kojem je deklarirana auto varijabla moลพe pristupiti.

Kljuฤna rijeฤ auto koristi se za definiranje klase automatske pohrane. Prema zadanim postavkama, automatska varijabla sadrลพi nepotrebnu vrijednost.

Example, auto int age;

Program u nastavku definira funkciju s dvije lokalne varijable

int add(void) {
   int a=13;
   auto int b=48;
return a+b;}

Uzimamo drugi program koji pokazuje razinu opsega "razinu vidljivosti" za automatske varijable u svakom blok kodu koje su neovisne jedna o drugoj:

#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);}

IZLAZ:

 3 2 1

Vanjska klasa pohrane u C

Extern oznaฤava klasu vanjske pohrane. Klasa vanjske pohrane koristi se kada imamo globalne funkcije ili varijable koje dijele dvije ili viลกe datoteka.

Rijeฤ vanjski koristi se za deklariranje globalne varijable ili funkcije u drugoj datoteci za pruลพanje reference varijable ili funkcije koja je veฤ‡ definirana u izvornoj datoteci.

Varijable definirane pomoฤ‡u kljuฤne rijeฤi extern nazivaju se globalne varijable. Ove varijable su dostupne u cijelom programu. Primijetite da se eksterna varijabla ne moลพe inicijalizirati jer je veฤ‡ definirana u izvornoj datoteci.

Example, extern void display();

Prva datoteka: main.c

#include <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

Druga datoteka: original.c

#include <stdio.h>
i=48;

Rezultat:

 value of the external integer is = 48


Kako biste kompajlirali i pokrenuli gornji kod, slijedite korake u nastavku

Korak 1) Napravi novi projekt,

  1. Odaberite Konzolnu aplikaciju
  2. Pritisnite Idi

Vanjska klasa pohrane u C

Korak 2) Odaberite C i kliknite Dalje

Vanjska klasa pohrane u C

Korak 3) Kliknite Dalje

Vanjska klasa pohrane u C

Korak 4) Unesite detalje i kliknite Dalje

Vanjska klasa pohrane u C

Korak 5) Kliknite Zavrลกi

Vanjska klasa pohrane u C

Korak 6) Stavite glavni kod kao ลกto je prikazano u prethodnom programu u datoteku main.c i spremite ga

Vanjska klasa pohrane u C

Korak 7) Napravite novu C datoteku [Datoteka -> Nova -> Prazna datoteka, spremite (kao original.c) i dodajte je trenutnom projektu klikom na โ€œOKโ€ u dijaloลกkom okviru.

Vanjska klasa pohrane u C

Korak 8) Stavite i spremite C kod originalne.c datoteke prikazane u prethodnom primjeru bez funkcije main().

Vanjska klasa pohrane u C

Korak 9) Izgradite i pokrenite svoj projekt. Rezultat je prikazan na sljedeฤ‡oj slici

Vanjska klasa pohrane u C

Statiฤka klasa pohrane u C

Statiฤke varijable koriste se unutar funkcije/datoteke kao lokalne statiฤke varijable. Takoฤ‘er se mogu koristiti kao globalna varijabla

  • Statiฤka lokalna varijabla je lokalna varijabla koja zadrลพava i pohranjuje svoju vrijednost izmeฤ‘u poziva funkcije ili bloka i ostaje vidljiva samo funkciji ili bloku u kojem je definirana.
  • Statiฤke globalne varijable su vidljive globalne varijable samo na datoteku u kojoj je deklarirana.
Example: static int count = 10;

Imajte na umu da statiฤka varijabla ima zadanu poฤetnu vrijednost nula i inicijalizira se samo jednom u svom ลพivotnom vijeku.

#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

Globalne varijable dostupne su u cijeloj datoteci, dok su statiฤke varijable dostupne samo odreฤ‘enom dijelu koda.

ลฝivotni vijek statiฤke varijable je u cijelom programskom kodu. Varijabla koja je deklarirana ili inicijalizirana koriลกtenjem statiฤke kljuฤne rijeฤi uvijek sadrลพi nulu kao zadanu vrijednost.

Registrirajte klasu pohrane u C

Klasu pohrane registara moลพete koristiti kada ลพelite pohraniti lokalne varijable unutar funkcija ili blokova u CPU registrima umjesto RAM kako bi imali brzi pristup ovim varijablama. Na primjer, "brojaฤi" su dobar kandidat za pohranu u registar.

Example: register int age;

Kljuฤna rijeฤ Registrirajte se koristi se za deklariranje klase pohrane registra. Varijable deklarirane pomoฤ‡u klase pohrane registra imaju ลพivotni vijek kroz cijeli program.

Sliฤno je klasi automatskog skladiลกtenja. Varijabla je ograniฤena na odreฤ‘eni blok. Jedina je razlika u tome ลกto se varijable deklarirane pomoฤ‡u klase pohrane registara pohranjuju unutar CPU registara umjesto u memoriju. Registar ima brลพi pristup od onog glavne memorije.

Varijable deklarirane pomoฤ‡u klase pohrane registara nemaju zadanu vrijednost. Ove se varijable ฤesto deklariraju na poฤetku programa.

#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*/}
}

IZLAZ:

error: address of register variable 'weight' requested

Sljedeฤ‡a tablica saลพima glavne znaฤajke svake klase pohrane koja se obiฤno koristi u C programiranju

Klasa skladiลกtenja izjava ฤŒuvanje Zadana poฤetna vrijednost Djelokrug ลฝivot
automobil Unutar funkcije/bloka memorija Nepredvidljiv Unutar funkcije/bloka Unutar funkcije/bloka
Registrirajte se Unutar funkcije/bloka CPU registri Smeฤ‡e Unutar funkcije/bloka Unutar funkcije/bloka
vanjski Izvan svih funkcija memorija nula Cijela datoteka i druge datoteke u kojima je varijabla deklarirana kao extern vrijeme izvoฤ‘enja programa
Statiฤki (lokalni) Unutar funkcije/bloka memorija nula Unutar funkcije/bloka vrijeme izvoฤ‘enja programa
Statiฤki (globalni) Izvan svih funkcija memorija nula Globalan vrijeme izvoฤ‘enja programa

Rezime

U ovom smo vodiฤu raspravljali o klasama pohrane u C-u, da saลพmemo:

  • Klasa pohrane u C-u koristi se za predstavljanje dodatnih informacija o varijabli.
  • Klasa pohrane predstavlja opseg i ลพivotni vijek varijable.
  • Takoฤ‘er govori tko moลพe pristupiti varijabli i odakle?
  • Auto, extern, register, static ฤetiri su razliฤite klase pohrane u C programu.
  • Specifikator klase pohrane u C jezik koristi se za definiranje varijabli, funkcija i parametara.
  • auto se koristi za lokalnu varijablu definiranu unutar bloka ili funkcije
  • registar se koristi za pohranjivanje varijabli u registre CPU-a umjesto memorijske lokacije za brzi pristup.
  • Statiฤki se koristi i za globalne i za lokalne varijable. Svaki od njih ima svoj sluฤaj upotrebe unutar C programa.
  • Extern se koristi za dijeljenje podataka izmeฤ‘u C projektnih datoteka.

Saลพmite ovu objavu uz: