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,
- Odaberite Konzolnu aplikaciju
- Pritisnite Idi
Korak 2) Odaberite C i kliknite Dalje
Korak 3) Kliknite Dalje
Korak 4) Unesite detalje i kliknite Dalje
Korak 5) Kliknite Zavrลกi
Korak 6) Stavite glavni kod kao ลกto je prikazano u prethodnom programu u datoteku main.c i spremite ga
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.
Korak 8) Stavite i spremite C kod originalne.c datoteke prikazane u prethodnom primjeru bez funkcije main().
Korak 9) Izgradite i pokrenite svoj projekt. Rezultat je prikazan na sljedeฤoj slici
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.








