C-tallennusluokat: Automaattinen, Ulkoinen, Staattinen, Rekisteri (esimerkkejä)
⚡ Älykäs yhteenveto
C-kielen tallennusluokat määrittelevät jokaisen muuttujan laajuuden, elinkaaren, oletusarvon ja muistipaikan käyttämällä neljää määritettä – auto, register, static ja extern – hallitakseen datan sijaintia ja säilyvyysaikaa suorituksen aikana.
Mikä on säilytysluokka C:ssä?
Tallennusluokka edustaa muuttujan näkyvyyttä ja sijaintia. Se kertoo mistä koodin osasta voimme käyttää muuttujaa. C:n tallennusluokkaa käytetään kuvaamaan seuraavia asioita:
- Muuttuva laajuus.
- Sijainti, johon muuttuja tallennetaan.
- Muuttujan alustettu arvo.
- Muuttujan elinikäinen.
- Kuka voi käyttää muuttujaa?
Näin ollen tallennusluokkaa käytetään edustamaan muuttujaa koskevia tietoja.
HUOMAUTUS: Muuttuja ei liity vain tietotyyppi, sen arvo, mutta myös varastointiluokka.
Mitkä ovat C:n säilytysluokat?
Tavallisia säilytysluokkia on yhteensä neljä. Alla oleva taulukko esittää varastoluokat C-muodossa.
| Varastointiluokka | Tarkoitus |
| auto | Se on oletustallennusluokka. |
| ulkoinen | Se on globaali muuttuja. |
| staattinen | Se on paikallinen muuttuja, joka pystyy palauttamaan arvon, vaikka ohjaus siirretään funktiokutsulle. |
| ilmoittautua | Se on muuttuja, joka on tallennettu rekisteriin. |
Automaattinen tallennusluokka C
Automaattisen tallennusluokan avulla määritettyjä muuttujia kutsutaan paikallisiksi muuttujiksi. Auto tarkoittaa automaattista säilytysluokkaa. Muuttuja on oletusarvoisesti automaattisen tallennusluokan luokassa, jos sitä ei ole erikseen määritetty.
Automaattisen muuttujan laajuus on rajoitettu vain tietylle lohkolle. Kun ohjaus menee ulos lohkosta, pääsy tuhoutuu. Tämä tarkoittaa, että vain se lohko, jossa automaattinen muuttuja on ilmoitettu, voi käyttää sitä.
Automaattisen tallennusluokan määrittämiseen käytetään avainsanaa auto. Oletusarvoisesti automaattinen muuttuja sisältää roskaarvon.
Example, auto int age;
Alla oleva ohjelma määrittelee funktion, jossa on kaksi paikallista muuttujaa
int add(void) { int a=13; auto int b=48; return a+b;}
Otamme toisen ohjelman, joka näyttää laajuustason "näkyvyystason" automaattisille muuttujille kussakin lohkokoodissa, jotka ovat toisistaan riippumattomia:
#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);}
lähtö:
3 2 1
Ulkoinen säilytysluokka C
Extern edustaa ulkoista tallennusluokkaa. Ulkoista tallennusluokkaa käytetään, kun meillä on globaaleja toimintoja tai muuttujia, jotka jaetaan kahden tai useamman tiedoston kesken.
Avainsanaa extern käytetään globaalin muuttujan tai funktion määrittämiseen toisessa tiedostossa, jotta saadaan viittaus muuttujaan tai funktioon, joka on jo määritelty alkuperäisessä tiedostossa.
Ulkoisella avainsanalla määritettyjä muuttujia kutsutaan globaaleiksi muuttujiksi. Nämä muuttujat ovat käytettävissä koko ohjelman ajan. Huomaa, että ulkoista muuttujaa ei voi alustaa, se on jo määritetty alkuperäisessä tiedostossa.
Example, extern void display();
Ensimmäinen tiedosto: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Toinen tiedosto: original.c
#include <stdio.h>
i=48;
Tulos:
value of the external integer is = 48
Kääntääksesi ja suorittaaksesi yllä olevan koodin, noudata alla olevia ohjeita
Vaihe 1) Luo uusi projekti,
- Valitse Konsolisovellus
- Napsauta Siirry
Vaihe 2) Valitse C ja napsauta Seuraava
Vaihe 3) Napsauta Seuraava
Vaihe 4) Syötä tiedot ja napsauta Seuraava
Vaihe 5) Napsauta Valmis
Vaihe 6) Lisää edellisessä ohjelmassa esitetty pääkoodi tiedostoon main.c ja tallenna se.
Vaihe 7) Luo uusi C-tiedosto [Tiedosto -> uusi -> Tyhjä tiedosto], tallenna se (kuten alkuperäinen.c) ja lisää se nykyiseen projektiin napsauttamalla valintaikkunassa "OK".
Vaihe 8) Lisää ja tallenna edellisessä esimerkissä näytetyn original.c-tiedoston C-koodi ilman main()-funktiota.
Vaihe 9) Rakenna ja suorita projektisi. Tulos näkyy seuraavassa kuvassa.
Staattinen säilytysluokka C
Staattisia muuttujia käytetään funktiossa/tiedostossa paikallisina staattisina muuttujina. Niitä voidaan käyttää myös a globaali muuttuja
- Staattinen paikallinen muuttuja on paikallinen muuttuja, joka säilyttää ja tallentaa arvonsa funktiokutsujen tai lohkon välillä ja jää näkyviin vain sille funktiolle tai lohkolle, jossa se on määritelty.
- Staattiset globaalit muuttujat ovat globaaleja muuttujia, jotka näkyvät vain tiedostolle, jossa ne on määritelty.
Example: static int count = 10;
Muista, että staattisen muuttujan oletusalkuarvo on nolla ja se alustetaan vain kerran elinkaarensa aikana.
#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);}
Tulos:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Yleiset muuttujat ovat käytettävissä koko tiedostossa, kun taas staattiset muuttujat ovat käytettävissä vain koodin tietyssä osassa.
Staattisen muuttujan elinikä on koko ohjelmakoodissa. Staattisella avainsanalla ilmoitettu tai alustettu muuttuja sisältää aina nollan oletusarvona.
Rekisteröidy tallennusluokkaan C
Voit käyttää rekisterin tallennusluokkaa, kun haluat tallentaa paikallisia muuttujia funktioihin tai lohkoihin CPU-rekistereihin sen sijaan, että RAM jotta pääset nopeasti käsiksi näihin muuttujiin. Esimerkiksi "laskurit" ovat hyvä kandidaatti tallennettavaksi rekisteriin.
Example: register int age;
Avainsanaa register käytetään rekisterin tallennusluokan määrittämiseen. Avainsanalla register storage class määritellyillä muuttujilla on elinkaari koko ohjelman ajan.
Se on samanlainen kuin automaattinen tallennusluokka. Muuttuja on rajoitettu tiettyyn lohkoon. Ainoa ero on, että rekisterin tallennusluokalla ilmoitetut muuttujat tallennetaan CPU-rekistereihin muistin sijaan. Rekisterillä on nopeampi pääsy kuin päämuistiin.
Rekisterin tallennusluokalla ilmoitetuilla muuttujilla ei ole oletusarvoa. Nämä muuttujat ilmoitetaan usein ohjelman alussa.
#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*/} }
lähtö:
error: address of register variable 'weight' requested
Seuraavassa taulukossa on yhteenveto kunkin tallennusluokan tärkeimmistä ominaisuuksista, joita käytetään yleisesti C-ohjelmoinnissa
| Varastointiluokka | Ilmoitus | varastointi | Oletusalkuarvo | Laajuus | Elinikäinen |
| auto | Toiminnon/lohkon sisällä | Muisti | ennalta arvaamaton | Toiminnon/lohkon sisällä | Toiminnon/lohkon sisällä |
| ilmoittautua | Toiminnon/lohkon sisällä | CPU-rekisterit | Roskat | Toiminnon/lohkon sisällä | Toiminnon/lohkon sisällä |
| ulkoinen | Kaikkien toimintojen ulkopuolella | Muisti | nolla | Koko tiedosto ja muut tiedostot, joissa muuttuja on ilmoitettu ulkoiseksi | ohjelman suoritusaika |
| Staattinen (paikallinen) | Toiminnon/lohkon sisällä | Muisti | nolla | Toiminnon/lohkon sisällä | ohjelman suoritusaika |
| Staattinen (maailmanlaajuinen) | Kaikkien toimintojen ulkopuolella | Muisti | nolla | Global | ohjelman suoritusaika |









