Opslagklassen in C: auto, extern, statisch, registerklasse in C

Inhoudsopgave:

Anonim

Wat is opslagklasse in C?

Een opslagklasse vertegenwoordigt de zichtbaarheid en de locatie van een variabele. Het vertelt uit welk deel van de code we toegang hebben tot een variabele. Een opslagklasse in C wordt gebruikt om de volgende dingen te beschrijven:

  • Het variabele bereik.
  • De locatie waar de variabele wordt opgeslagen.
  • De geïnitialiseerde waarde van een variabele.
  • Een leven lang een variabele.
  • Wie heeft toegang tot een variabele?

Dus een opslagklasse wordt gebruikt om de informatie over een variabele weer te geven.

OPMERKING: een variabele is niet alleen gekoppeld aan een gegevenstype, de waarde ervan, maar ook aan een opslagklasse.

Er zijn in totaal vier soorten standaard opslagklassen. De onderstaande tabel geeft de opslagklassen in C.

Opslagklasse Doel
auto Het is een standaard opslagklasse.
extern Het is een globale variabele.
statisch Het is een lokale variabele die een waarde kan retourneren, zelfs wanneer de controle wordt overgedragen aan de functieaanroep.
registreren Het is een variabele die wordt opgeslagen in een register.

In deze C-tutorial leer je verschillende soorten opslagklassen in C met voorbeelden-

  • Automatische opslagklasse in C.
  • Externe opslagklasse in C
    • Eerste bestand: main.c
    • Tweede bestand: origineel. C
  • Statische opslagklasse in C.
  • Registreer opslagklasse in C

Automatische opslagklasse in C.

De variabelen die zijn gedefinieerd met behulp van de automatische opslagklasse, worden lokale variabelen genoemd. Auto staat voor automatische opslagklasse. Een variabele bevindt zich standaard in de auto-opslagklasse als deze niet expliciet is opgegeven.

Het bereik van een automatische variabele is alleen beperkt tot het specifieke blok. Zodra de controle uit het blok gaat, wordt de toegang vernietigd. Dit betekent dat alleen het blok waarin de automatische variabele is gedeclareerd er toegang toe heeft.

Een trefwoord auto wordt gebruikt om een ​​auto-opslagklasse te definiëren. Standaard bevat een automatische variabele een afvalwaarde.

Example, auto int age;

Het onderstaande programma definieert een functie met twee lokale variabelen

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

We nemen een ander programma dat het bereikniveau "zichtbaarheidsniveau" toont voor automatische variabelen in elke blokcode die onafhankelijk van elkaar zijn:

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

UITGANG:

 3 2 1 

Externe opslagklasse in C

Extern staat voor externe opslagklasse. Externe opslagklasse wordt gebruikt als we globale functies of variabelen hebben die worden gedeeld tussen twee of meer bestanden.

Sleutelwoord extern wordt gebruikt om een ​​globale variabele of functie in een ander bestand te declareren om de referentie te geven van een variabele of functie die al in het originele bestand is gedefinieerd.

De variabelen die zijn gedefinieerd met behulp van een extern trefwoord, worden globale variabelen genoemd. Deze variabelen zijn gedurende het hele programma toegankelijk. Merk op dat de externe variabele niet kan worden geïnitialiseerd, deze is al gedefinieerd in het originele bestand.

Example, extern void display();

Eerste bestand: main.c

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

Tweede bestand: origineel. C

#include i=48;

Resultaat:

 value of the external integer is = 48

Volg de onderstaande stappen om de bovenstaande code te compileren en uit te voeren

Stap 1) Creëer een nieuw project,

  1. Selecteer Consoletoepassing
  2. Klik op Go

Stap 2) Selecteer C en klik op Volgende

Stap 3) Klik op Volgende

Stap 4) Voer details in en klik op Volgende

Stap 5) Klik op Voltooien

Stap 6) Plaats de hoofdcode zoals getoond in het vorige programma in het main.c-bestand en sla het op

Stap 7) Maak een nieuw C-bestand aan [Bestand -> nieuw -> Leeg bestand, sla het op (als origineel.c) en voeg het toe aan het huidige project door op "OK" in het dialoogvenster te klikken.

Stap 8) Plaats en bewaar de C-code van het originele.c-bestand dat in het vorige voorbeeld wordt getoond zonder de functie main ().

Stap 9) Bouw en voer uw project uit. Het resultaat wordt getoond in de volgende afbeelding

Statische opslagklasse in C.

De statische variabelen worden binnen functie / bestand gebruikt als lokale statische variabelen. Ze kunnen ook als globale variabele worden gebruikt

  • Statische lokale variabele is een lokale variabele die zijn waarde behoudt en opslaat tussen functieaanroepen of blok en alleen zichtbaar blijft voor de functie of het blok waarin deze is gedefinieerd.
  • Statische globale variabelen zijn globale variabelen die alleen zichtbaar zijn voor het bestand waarin ze zijn gedeclareerd.
Example: static int count = 10;

Houd er rekening mee dat de statische variabele een standaard beginwaarde nul heeft en slechts één keer in zijn levensduur wordt geïnitialiseerd.

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

Resultaat:

iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9

Globale variabelen zijn overal in het bestand toegankelijk, terwijl statische variabelen alleen toegankelijk zijn voor het specifieke deel van een code.

De levensduur van een statische variabele zit in de volledige programmacode. Een variabele die wordt gedeclareerd of geïnitialiseerd met een statisch sleutelwoord, bevat altijd nul als standaardwaarde.

Registreer opslagklasse in C

U kunt de registeropslagklasse gebruiken als u lokale variabelen wilt opslaan binnen functies of blokken in CPU-registers in plaats van RAM om snel toegang te hebben tot deze variabelen. Zo zijn "tellers" een goede kandidaat om in het register te worden opgeslagen.

Example: register int age;

Het trefwoord register wordt gebruikt om een ​​registeropslagklasse aan te geven. De variabelen die zijn gedeclareerd met behulp van de registeropslagklasse, hebben een levensduur gedurende het hele programma.

Het is vergelijkbaar met de automatische opslagklasse. De variabele is beperkt tot het specifieke blok. Het enige verschil is dat de variabelen die zijn gedeclareerd met behulp van de registeropslagklasse, worden opgeslagen in CPU-registers in plaats van in een geheugen. Register heeft snellere toegang dan die van het hoofdgeheugen.

De variabelen die zijn gedeclareerd met behulp van de registeropslagklasse hebben geen standaardwaarde. Deze variabelen worden vaak aan het begin van een programma gedeclareerd.

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

UITGANG:

error: address of register variable 'weight' requested

De volgende tabel geeft een overzicht van de belangrijkste kenmerken van elke opslagklasse die gewoonlijk worden gebruikt bij C-programmering

Opslagklasse Verklaring Opslag Standaard beginwaarde Reikwijdte Levenslang
auto Binnen een functie / blok Geheugen Onvoorspelbaar Binnen de functie / blok Binnen de functie / blok
registreren Binnen een functie / blok CPU-registers Afval Binnen de functie / blok Binnen de functie / blok
extern Buiten alle functies Geheugen Nul Gehele bestand en andere bestanden waarin de variabele als extern is gedeclareerd programma looptijd
Statisch (lokaal) Binnen een functie / blok Geheugen Nul Binnen de functie / blok programma looptijd
Statisch (globaal) Buiten alle functies Geheugen Nul Globaal programma looptijd

Overzicht

In deze tutorial hebben we opslagklassen in C besproken, om samen te vatten:

  • Een opslagklasse in C wordt gebruikt om aanvullende informatie over een variabele weer te geven.
  • Opslagklasse vertegenwoordigt de omvang en levensduur van een variabele.
  • Het vertelt ook wie toegang heeft tot een variabele en van waar?
  • Auto, extern, register, statisch zijn de vier verschillende opslagklassen in een C-programma.
  • Een opslagklassespecificatie in C-taal wordt gebruikt om variabelen, functies en parameters te definiëren.
  • auto wordt gebruikt voor een lokale variabele die binnen een blok of functie is gedefinieerd
  • register wordt gebruikt om de variabele op te slaan in CPU-registers in plaats van een geheugenlocatie voor snelle toegang.
  • Statisch wordt gebruikt voor zowel globale als lokale variabelen. Elk heeft zijn eigen use-case binnen een C-programma.
  • Extern wordt gebruikt voor het delen van gegevens tussen C-projectbestanden.