Opslagklassen in C: Auto, Extern, Statisch, Register (voorbeelden)

Wat is opslagklasse in C?

Een storage class vertegenwoordigt de zichtbaarheid en een locatie van een variabele. Het vertelt vanuit welk deel van de code we toegang hebben tot een variabele. Een storage class 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 levensduur van een variabele.
  • Wie heeft toegang tot een variabele?

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

NOTITIE: Een variabele is niet alleen geassocieerd met a data type, de waarde ervan, maar ook een opslagklasse.

Wat zijn de soorten opslagklassen in C?

Er zijn in totaal vier soorten standaardopslagklassen. Onderstaande tabel geeft de opslagklassen in C weer.

Opslagklasse Doel
auto Het is een standaardopslagklasse.
extern Het is een globale variabele.
statisch Het is een lokale variabele die een waarde kan retourneren, zelfs als de controle wordt overgedragen naar de functieaanroep.
registreren Het is een variabele die in een register wordt opgeslagen.

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 automatische opslagklasse als deze niet expliciet is opgegeven.

De scope van een autovariabele is beperkt tot het specifieke blok. Zodra de controle het blok verlaat, wordt de toegang vernietigd. Dit betekent dat alleen het blok waarin de autovariabele is gedeclareerd, er toegang toe heeft.

Een trefwoord auto wordt gebruikt om een ​​automatische opslagklasse te definiëren. Standaard bevat een autovariabele een garbage-waarde.

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 autovariabelen in elke blokcode die onafhankelijk van elkaar zijn:

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

OUTPUT:

 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.

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

De variabelen die met een extern trefwoord zijn gedefinieerd, 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 <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

Tweede bestand: original.c

#include <stdio.h>
i=48;

Resultaat:

 value of the external integer is = 48


Om de bovenstaande code te compileren en uit te voeren, volgt u de onderstaande stappen

Stap 1) Nieuw project aanmaken,

  1. Selecteer Consoletoepassing
  2. Klik op Go

Externe opslagklasse in C

Stap 2) Selecteer C en klik op Volgende

Externe opslagklasse in C

Stap 3) Klik op Volgende

Externe opslagklasse in C

Stap 4) Vul de gegevens in en klik op Volgende

Externe opslagklasse in C

Stap 5) Klik op Voltooien

Externe opslagklasse in C

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

Externe opslagklasse in C

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

Externe opslagklasse in C

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

Externe opslagklasse in C

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

Externe opslagklasse in C

Statische opslagklasse in C

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

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

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

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

Resultaat:

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

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

De levensduur van een statische variabele zit in de gehele programmacode. Een variabele die wordt gedeclareerd of geïnitialiseerd met behulp van een statisch trefwoord, 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 krijgen tot deze variabelen. “Tellers” zijn bijvoorbeeld een goede kandidaat om in het register te worden opgeslagen.

Example: register int age;

Het trefwoord registreren wordt gebruikt om een ​​registeropslagklasse te declareren. 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 <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*/}
}

OUTPUT:

error: address of register variable 'weight' requested

De volgende tabel vat de belangrijkste kenmerken van elke opslagklasse samen die veelgebruikt worden in C-programmering

Opslag klasse Verklaring Opslag Standaard initiële waarde strekking Levensduur
auto Binnen een functie/blok Geheugen Onvoorspelbare Binnen de functie/blok Binnen de functie/blok
registreren Binnen een functie/blok CPU-registers Vuilnis Binnen de functie/blok Binnen de functie/blok
extern Buiten alle functies Geheugen Nul Volledige het bestand en andere bestanden waarin de variabele als extern is gedeclareerd looptijd van het programma
Statisch (lokaal) Binnen een functie/blok Geheugen Nul Binnen de functie/blok looptijd van het programma
Statisch (globaal) Buiten alle functies Geheugen Nul Globaal looptijd van het programma

Samenvatting

In deze tutorial hebben we opslagklassen in C besproken, samengevat:

  • Een opslagklasse in C wordt gebruikt om aanvullende informatie over een variabele weer te geven.
  • Opslagklasse vertegenwoordigt de reikwijdte en levensduur van een variabele.
  • Het vertelt ook wie toegang heeft tot een variabele en waar vandaan?
  • 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 in een geheugenlocatie voor snelle toegang.
  • Statisch wordt gebruikt voor zowel globale als lokale variabelen. Elk heeft zijn use-case binnen een C-programma.
  • Extern wordt gebruikt voor het delen van gegevens tussen C-projectbestanden.