Classi di archiviazione in C: Auto, Extern, Static, Register (Esempi)
Cos'è la classe di archiviazione in C?
Una classe di archiviazione rappresenta la visibilità e la posizione di una variabile. Indica da quale parte del codice possiamo accedere a una variabile. Una classe di archiviazione in C è usata per descrivere le seguenti cose:
- L'ambito variabile.
- La posizione in cui verrà archiviata la variabile.
- Il valore inizializzato di una variabile.
- Una vita di una variabile.
- Chi può accedere a una variabile?
Pertanto una classe di archiviazione viene utilizzata per rappresentare le informazioni su una variabile.
NOTA: Una variabile non è solo associata a a tipo di dati, il suo valore ma anche una classe di archiviazione.
Quali sono i tipi di classi di archiviazione in C?
Esistono in totale quattro tipi di classi di archiviazione standard. La tabella seguente rappresenta le classi di archiviazione in C.
Classe di archiviazione | Scopo |
---|---|
auto | È una classe di archiviazione predefinita. |
esterno | È una variabile globale. |
statico | È una variabile locale che è in grado di restituire un valore anche quando il controllo viene trasferito alla chiamata della funzione. |
registro | È una variabile che viene memorizzata all'interno di un registro. |
Classe di stoccaggio automatico in C
Le variabili definite utilizzando la classe di archiviazione automatica sono chiamate variabili locali. Auto sta per classe di memorizzazione automatica. Una variabile è nella classe di archiviazione automatica per impostazione predefinita se non è specificata esplicitamente.
L'ambito di una variabile automatica è limitato solo al blocco particolare. Una volta che il controllo esce dal blocco, l'accesso viene distrutto. Ciò significa che solo il blocco in cui è dichiarata la variabile auto può accedervi.
Una parola chiave auto viene utilizzata per definire una classe di archiviazione automatica. Per impostazione predefinita, una variabile auto contiene un valore spazzatura.
Example, auto int age;
Il programma seguente definisce una funzione con due variabili locali
int add(void) { int a=13; auto int b=48; return a+b;}
Prendiamo un altro programma che mostra il livello di visibilità "livello di visibilità" per le variabili automatiche in ciascun codice di blocco che sono indipendenti l'una dall'altra:
#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);}
USCITA:
3 2 1
Classe di archiviazione esterna in C
Extern sta per classe di archiviazione esterna. La classe di archiviazione esterna viene utilizzata quando disponiamo di funzioni o variabili globali condivise tra due o più file.
Parola chiave esterno viene utilizzato per dichiarare una variabile o funzione globale in un altro file per fornire il riferimento a una variabile o una funzione che è già stata definita nel file originale.
Le variabili definite utilizzando una parola chiave extern sono chiamate variabili globali. Queste variabili sono accessibili in tutto il programma. Si noti che la variabile extern non può essere inizializzata poiché è già stata definita nel file originale.
Example, extern void display();
Primo file: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Secondo file: originale.c
#include <stdio.h> i=48;
Risultato:
value of the external integer is = 48
Per compilare ed eseguire il codice sopra, seguire i passaggi seguenti
Passo 1) Crea un nuovo progetto,
- Seleziona Applicazione console
- Fai clic su Vai
Passo 2) Selezionare C e fare clic su Avanti
Passo 3) Fare clic su Avanti
Passo 4) Inserisci i dettagli e fai clic su Avanti
Passo 5) Fai clic su Fine
Passo 6) Inserisci il codice principale come mostrato nel programma precedente nel file main.c e salvalo
Passo 7) Crea un nuovo file C [File -> nuovo -> File vuoto, salvalo (come originale.c) e aggiungilo al progetto corrente cliccando su “OK” nella finestra di dialogo.
Passo 8) Inserisci e salva il codice C del file originale.c mostrato nell'esempio precedente senza la funzione main().
Passo 9) Costruisci ed esegui il tuo progetto. Il risultato è mostrato nella figura successiva
Classe di archiviazione statica in C
Le variabili statiche vengono utilizzate all'interno della funzione/file come variabili statiche locali. Possono anche essere usati come a variabile globale
- La variabile locale statica è una variabile locale che conserva e memorizza il proprio valore tra chiamate di funzione o blocco e rimane visibile solo alla funzione o al blocco in cui è definita.
- Le variabili globali statiche sono variabili globali visibili solo al file in cui è dichiarato.
Example: static int count = 10;
Tieni presente che la variabile statica ha un valore iniziale predefinito pari a zero e viene inizializzata solo una volta nella sua vita.
#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);}
Risultato:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Le variabili globali sono accessibili in tutto il file mentre le variabili statiche sono accessibili solo alla parte particolare di un codice.
La durata di una variabile statica è contenuta nell'intero codice del programma. Una variabile dichiarata o inizializzata utilizzando la parola chiave statica contiene sempre zero come valore predefinito.
Registrare la classe di archiviazione in C
È possibile utilizzare la classe di archiviazione dei registri quando si desidera archiviare variabili locali all'interno di funzioni o blocchi nei registri della CPU anziché RAM per avere un rapido accesso a queste variabili. Ad esempio, i “contatori” sono un buon candidato per essere archiviati nel registro.
Example: register int age;
La parola chiave registro viene utilizzato per dichiarare una classe di archiviazione del registro. Le variabili dichiarate utilizzando la classe di archiviazione del registro hanno una durata di vita in tutto il programma.
È simile alla classe di archiviazione automatica. La variabile è limitata al blocco particolare. L'unica differenza è che le variabili dichiarate utilizzando la classe di archiviazione dei registri sono archiviate nei registri della CPU anziché in una memoria. Il registro ha un accesso più veloce di quello della memoria principale.
Le variabili dichiarate utilizzando la classe di archiviazione del registro non hanno un valore predefinito. Queste variabili vengono spesso dichiarate all'inizio di un programma.
#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*/} }
USCITA:
error: address of register variable 'weight' requested
La tabella successiva riassume le caratteristiche principali di ciascuna classe di archiviazione comunemente utilizzata nella programmazione C
Classe di stoccaggio | Dichiarazione | Archiviazione | Valore iniziale predefinito | Obbiettivo | Per sempre. |
---|---|---|---|---|---|
auto | All'interno di una funzione/blocco | Memorie | Imprevedibile | All'interno della funzione/blocco | All'interno della funzione/blocco |
registro | All'interno di una funzione/blocco | Registri della CPU | Spazzatura | All'interno della funzione/blocco | All'interno della funzione/blocco |
esterno | Fuori da tutte le funzioni | Memorie | Zero | Intero il file e altri file in cui la variabile è dichiarata come extern | tempo di esecuzione del programma |
Statico (locale) | All'interno di una funzione/blocco | Memorie | Zero | All'interno della funzione/blocco | tempo di esecuzione del programma |
Statico (globale) | Fuori da tutte le funzioni | Memorie | Zero | globali | tempo di esecuzione del programma |
Sommario
In questo tutorial abbiamo discusso delle classi di archiviazione in C, per riassumere:
- Una classe di archiviazione in C viene utilizzata per rappresentare informazioni aggiuntive su una variabile.
- La classe di archiviazione rappresenta l'ambito e la durata di una variabile.
- Indica anche chi può accedere a una variabile e da dove?
- Auto, extern, registro, statico sono le quattro diverse classi di archiviazione in un programma C.
- Un identificatore della classe di archiviazione in Linguaggio C. viene utilizzato per definire variabili, funzioni e parametri.
- auto viene utilizzato per una variabile locale definita all'interno di un blocco o di una funzione
- Il registro viene utilizzato per memorizzare la variabile nei registri della CPU anziché nella posizione di memoria per un accesso rapido.
- Statico viene utilizzato sia per le variabili globali che per quelle locali. Ognuno ha il suo caso d'uso all'interno di un programma C.
- Extern viene utilizzato per la condivisione dei dati tra file di progetto C.