Třídy úložiště v C: Auto, Exter, Static, Register (Příklady)

Co je třída úložiště v C?

Třída úložiště představuje viditelnost a umístění proměnné. Říká, z jaké části kódu můžeme přistupovat k proměnné. Třída úložiště v C se používá k popisu následujících věcí:

  • Variabilní rozsah.
  • Místo, kde bude proměnná uložena.
  • Inicializovaná hodnota proměnné.
  • Životnost proměnné.
  • Kdo má přístup k proměnné?

Třída úložiště se tedy používá k reprezentaci informací o proměnné.

POZNÁMKA: Proměnná není spojena pouze s a datový typ, svou hodnotu, ale také skladovací třídu.

Jaké jsou typy tříd úložiště v C?

Existují celkem čtyři typy standardních tříd úložiště. Níže uvedená tabulka představuje třídy úložiště v C.

Třída úložiště Účel
auto Je to výchozí třída úložiště.
externí Je to globální proměnná.
statický Je to lokální proměnná, která je schopna vracet hodnotu, i když je řízení přeneseno na volání funkce.
registrovat se Je to proměnná, která je uložena v registru.

Třída automatického ukládání v C

Proměnné definované pomocí třídy auto storage se nazývají lokální proměnné. Auto znamená třídu automatického ukládání. Proměnná je standardně ve třídě automatického ukládání, pokud není explicitně specifikována.

Rozsah automatické proměnné je omezen pouze na konkrétní blok. Jakmile ovládací prvek opustí blok, přístup je zničen. To znamená, že k ní má přístup pouze blok, ve kterém je proměnná auto deklarována.

Klíčové slovo auto se používá k definování třídy automatického ukládání. Ve výchozím nastavení obsahuje proměnná auto hodnotu nesmyslu.

Example, auto int age;

Níže uvedený program definuje funkci se dvěma lokálními proměnnými

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

Vezmeme další program, který ukazuje úroveň rozsahu „úroveň viditelnosti“ pro automatické proměnné v každém kódu bloku, které jsou na sobě nezávislé:

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

VÝSTUP:

 3 2 1

Třída externího úložiště v C

Extern znamená třídu externího úložiště. Třída externího úložiště se používá, když máme globální funkce nebo proměnné, které jsou sdíleny mezi dvěma nebo více soubory.

Klíčové slovo externí se používá k deklaraci globální proměnné nebo funkce v jiném souboru, aby poskytl odkaz na proměnnou nebo funkci, které již byly definovány v původním souboru.

Proměnné definované pomocí klíčového slova extern se nazývají globální proměnné. Tyto proměnné jsou přístupné v celém programu. Všimněte si, že externí proměnnou nelze inicializovat, byla již definována v původním souboru.

Example, extern void display();

První soubor: main.c

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

Druhý soubor: original.c

#include <stdio.h>
i=48;

Výsledek:

 value of the external integer is = 48


Chcete-li zkompilovat a spustit výše uvedený kód, postupujte podle níže uvedených kroků

Krok 1) Vytvořit nový projekt,

  1. Vyberte Aplikace konzoly
  2. Klikněte na tlačítko Přejít

Třída externího úložiště v C

Krok 2) Vyberte C a klikněte na Další

Třída externího úložiště v C

Krok 3) Klepněte na tlačítko Další

Třída externího úložiště v C

Krok 4) Zadejte podrobnosti a klikněte na Další

Třída externího úložiště v C

Krok 5) Klepněte na tlačítko Dokončit

Třída externího úložiště v C

Krok 6) Vložte hlavní kód podle předchozího programu do souboru main.c a uložte jej

Třída externího úložiště v C

Krok 7) Vytvořte nový soubor C [File -> new -> Empty File , uložte (jako original.c) a přidejte jej do aktuálního projektu kliknutím na „OK“ v dialogovém okně.

Třída externího úložiště v C

Krok 8) Vložte a uložte C kód souboru original.c ukázaného v předchozím příkladu bez funkce main().

Třída externího úložiště v C

Krok 9) Sestavte a spusťte svůj projekt. Výsledek je znázorněn na následujícím obrázku

Třída externího úložiště v C

Třída statického úložiště v C

Statické proměnné se používají v rámci funkce/souboru jako lokální statické proměnné. Mohou být také použity jako a globální proměnná

  • Statická lokální proměnná je lokální proměnná, která uchovává a ukládá svou hodnotu mezi voláním funkce nebo blokem a zůstává viditelná pouze pro funkci nebo blok, ve kterém je definována.
  • Statické globální proměnné jsou viditelné globální proměnné pouze do souboru, ve kterém je deklarován.
Example: static int count = 10;

Mějte na paměti, že statická proměnná má výchozí počáteční hodnotu nula a je inicializována pouze jednou za dobu své existence.

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

Výsledek:

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

Globální proměnné jsou přístupné v celém souboru, zatímco statické proměnné jsou přístupné pouze pro konkrétní část kódu.

Životnost statické proměnné je v celém kódu programu. Proměnná, která je deklarována nebo inicializována pomocí statického klíčového slova, vždy obsahuje nulu jako výchozí hodnotu.

Zaregistrujte třídu úložiště v C

Třídu úložiště registrů můžete použít, když chcete místo toho ukládat místní proměnné v rámci funkcí nebo bloků v registrech CPU RAM abyste měli rychlý přístup k těmto proměnným. Dobrým kandidátem pro uložení do registru jsou například „počítadla“.

Example: register int age;

Klíčové slovo registrovat se se používá k deklaraci třídy úložiště registru. Proměnné deklarované pomocí třídy úložiště registru mají životnost v celém programu.

Je podobná třídě automatického ukládání. Proměnná je omezena na konkrétní blok. Jediný rozdíl je v tom, že proměnné deklarované pomocí třídy úložiště registrů jsou uloženy uvnitř registrů CPU namísto paměti. Registr má rychlejší přístup než hlavní paměť.

Proměnné deklarované pomocí třídy úložiště registru nemají žádnou výchozí hodnotu. Tyto proměnné jsou často deklarovány na začátku programu.

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

VÝSTUP:

error: address of register variable 'weight' requested

Následující tabulka shrnuje hlavní vlastnosti každé třídy úložiště, které se běžně používají v programování v jazyce C

Třída úložiště Prohlášení Skladování Výchozí počáteční hodnota Rozsah Život
auto Uvnitř funkce/bloku Memory Nepředvídatelné V rámci funkce/bloku V rámci funkce/bloku
registrovat se Uvnitř funkce/bloku Registry CPU Odpadky V rámci funkce/bloku V rámci funkce/bloku
externí Mimo všechny funkce Memory        Nulu Celý soubor a další soubory, kde je proměnná deklarována jako externí běh programu
Statické (místní) Uvnitř funkce/bloku Memory        Nulu V rámci funkce/bloku běh programu
Statické (globální) Mimo všechny funkce Memory        Nulu Globální běh programu

Shrnutí

V tomto tutoriálu jsme diskutovali o třídách úložiště v C, abychom to shrnuli:

  • Třída úložiště v C se používá k reprezentaci dalších informací o proměnné.
  • Třída úložiště představuje rozsah a životnost proměnné.
  • Také říká, kdo a odkud může přistupovat k proměnné?
  • Auto, extern, register, static jsou čtyři různé třídy úložiště v programu C.
  • Specifikátor třídy úložiště v Jazyk C se používá k definování proměnných, funkcí a parametrů.
  • auto se používá pro lokální proměnnou definovanou v rámci bloku nebo funkce
  • Registr se používá k uložení proměnné do registrů CPU, místo do paměti pro rychlý přístup.
  • Statické se používá pro globální i lokální proměnné. Každý z nich má svůj případ použití v programu C.
  • Extern se používá pro sdílení dat mezi soubory projektu C.