Classes de stockage en C : différents types de classes de stockage [avec exemples]
Publié: 2020-10-21Le codage avec C est fortement centré sur l'utilisation de variables dans chaque programme. Ce sont les aspects clés de la programmation en C. Chaque variable en C a deux propriétés ; types et classes de stockage. Parmi eux, le type fait référence au type de données de la variable, et les classes de stockage en C déterminent la portée, la durée de vie et la visibilité de la variable. Les classes de stockage en C sont utilisées pour trouver la durée de vie, la visibilité, l'emplacement de la mémoire et la valeur initiale d'une variable.
Dans cet article de blog, nous aurons un aperçu détaillé des classes de stockage en C , de ses types et de la manière dont ses caractéristiques influencent la sortie du programme avec quelques exemples de programmation. Une classe de stockage en C est utilisée pour représenter les informations d'une variable.
Apprenez à créer des applications comme Swiggy, Quora, IMDB et plus
Table des matières
Que sont les classes de stockage en C ?
Les classes de stockage en C allouent la zone de stockage d'une variable qui sera conservée en mémoire. Ils sont stockés dans la RAM d'un système. Outre l'espace de stockage, ils déterminent la portée d'une variable. Les variables du programme C sont stockées dans un emplacement physique de la mémoire aléatoire, qui est principalement la mémoire de l'appareil et les registres du processeur.
Les classes de stockage en C définissent également la durée de vie de la variable et la qualifient de "locale" ou "globale". Les classes de stockage sont également utiles pour définir la portée ou la visibilité, et la valeur initiale de la variable. Il existe principalement quatre classes de stockage en C , à savoir. automatique , registre , statique et externe . Nous discuterons de chacun un par un plus loin.
Comment les classes de stockage en C sont-elles déclarées ?
Les quatre classes de stockage en C sont déclarées dans un bloc ou un programme avec les spécificateurs de classe de stockage, auto, register, extern, static. Il existe un autre spécificateur de classe de stockage, 'typedef' utilisé dans la forme syntaxique, et ne réserve pas de stockage. Les spécificateurs indiquent au compilateur de stocker les variables. La classe de stockage externe en C indique au compilateur que la variable définie est déclarée avec une liaison externe.

Il existe une différence essentielle entre définir et déclarer une variable. Définir une variable consiste à allouer de la mémoire à la variable et la déclarer signifie l'initialiser avec une valeur.
Syntaxe:
spécificateur_classe_stockage type_données nom_variable ;
Lire : Idées de projets et sujets intéressants en C # pour les débutants
Cas particulier : Lorsqu'aucun spécificateur de classe de stockage n'est déclaré ou défini dans un programme
Au moins un spécificateur de classe de stockage est donné dans la déclaration de variable. Mais, dans le cas où aucun spécificateur de classe de stockage n'est spécifié, les règles suivantes sont suivies :
1. Les variables déclarées dans une fonction sont considérées comme auto.
2. Les fonctions déclarées dans une fonction sont considérées comme externes.
3. Les variables et les fonctions déclarées en dehors d'une fonction sont considérées comme statiques, avec une liaison externe .
Quels sont les types de classes de stockage en C ?
Il existe quatre classes de stockage en C , examinons-les :
1. Classes de stockage automatiques en C
Chaque variable définie dans une fonction ou un bloc appartient à la classe de stockage automatique par défaut si aucune classe de stockage n'est mentionnée. Les variables d'une fonction ou d'un bloc appartenant à la classe de stockage automatique sont déclarées avec le spécificateur auto. Les variables sous auto en C sont locales au bloc où elles sont définies et sont supprimées en dehors du bloc.

Un programme simple montrant des classes de stockage automatique :
#include <stdio.h>
int main( )
{
auto int je = 11 ;
{
auto int je = 22 ;
{
auto int je = 33 ;
printf ("%d", je);
}
printf ("%d", je);
}
printf ( "%d", je);
}
La sortie du programme :
3 2 1
Explication:
Dans le programme ci-dessus, il y a trois fois la variable i est déclarée. Des variables portant le même nom peuvent être définies dans des blocs différents. Ainsi, ce programme se compilera et s'exécutera avec succès sans aucune erreur. La fonction 'printf' dans le bloc le plus interne imprimera 3 et la variable i dans ce bloc sera détruite après la fin du bloc.
Le suivant, le deuxième bloc extérieur imprime 2 auquel succède ensuite le bloc extérieur qui imprime 1. Les variables automatiques sont correctement initialisées ; sinon, vous obtiendrez des valeurs indéfinies car le compilateur ne leur donne pas de valeur initiale.
2. Enregistrez les classes de stockage en C
Les variables appartenant à une classe de stockage de registre sont équivalentes à auto en C mais sont stockées dans des registres CPU et non dans la mémoire, d'où le nom. Ce sont ceux auxquels on accède fréquemment. Le spécificateur de registre est utilisé pour déclarer la variable de la classe de stockage de registre. Les variables d'une classe de stockage de registre sont locales au bloc où elles sont définies et détruites lorsque le bloc se termine.
Un programme simple montrant les classes de stockage de registre :
#include <stdio.h>
int main()
{
registre int i = 10 ;
entier *p = &i; //erreur : adresse de la variable de registre demandée
printf ("Valeur de i : %d", *p) ;
printf ("Adresse de i : %u", p) ;
}
Explication:
Dans le programme ci-dessus, le code essaie d'obtenir l'adresse de la variable i dans la variable de pointeur p mais comme i est déclaré comme variable de registre, le code ne se compilera pas et affichera l'erreur "Erreur : adresse de la variable de registre demandée" .
Seuls certains types de variables sont placés dans des registres. Les variables de registre ne reçoivent pas de valeur initiale par le compilateur.
Apprendre : C++ Vs Java : Différence entre C++ et Java
3. Classes de stockage statiques en C
La visibilité des variables statiques est nulle en dehors de leur fonction ou fichier, mais leurs valeurs sont conservées entre les appels. Les variables avec une classe de stockage statique sont déclarées avec le spécificateur statique. Les variables statiques se trouvent dans une fonction ou un fichier. Le spécificateur statique fonctionne différemment avec les variables locales et globales.
Programmes simples montrant des classes de stockage statiques avec des variables locales et globales :
je. Variable locale
#include <stdio.h>
void staticDemo()
{
statique int je ;
{
entier statique je = 1 ;
printf ("%d ", je);
je++ ;
}
printf ("%d", je);
je++ ;
}
int main()
{
démostatique();
démostatique();
}
La sortie du programme :
dix
2 1
Explication:
Lorsqu'une variable locale est définie par un spécificateur statique, à l'intérieur d'une fonction ou d'un bloc, un espace de stockage permanent est créé dans le compilateur. La variable locale statique est visible pour la fonction ou le bloc où elle est spécifiée et conserve sa valeur entre les appels de fonction. Dans le programme ci-dessus, la variable statique i est définie à deux endroits dans deux blocs à l'intérieur de la fonction staticDemo(). staticDemo() est appelé two dans la fonction main. Lors du prochain appel, les variables statiques conservent leurs anciennes valeurs et n'ont pas besoin d'être réinitialisées.
ii. Variable globale
#include <stdio.h>
entier statique gInt = 1 ;
statique vide staticDemo()
{
statique int je ;
printf ("%d ", je);
je++ ;
printf ("%d", globalInt);
globalInt++ ;
}
int main()
{
démostatique();
démostatique();
}
La sortie du programme :
0 1
1 2
Explication:
Les variables statiques n'ont besoin d'être initialisées qu'une seule fois dans un programme et elles sont conservées pendant toute la durée de vie. Ils ont une valeur initiale par défaut de zéro.
Lorsqu'une variable ou une fonction globale est définie par un spécificateur statique, cette variable ou cette fonction n'est connue que du fichier dans lequel elle est définie. Pour une variable globale, les autres routines de fichier ne peuvent pas accéder et modifier son contenu car une variable globale statique a un lien interne. Dans le programme ci-dessus, la variable globale statique globalInt et une fonction statique staticDemo() sont définies comme statiques et ne peuvent pas être utilisées en dehors du fichier C.
4. Classes de stockage externe en C
Les variables ou fonctions de classe de stockage externe sont déclarées par le spécificateur 'extern'. Lorsqu'une variable est déclarée avec un spécificateur externe, aucun stockage n'est alloué à la variable et on suppose qu'elle a déjà été définie ailleurs dans le programme. Avec un spécificateur externe, la variable n'est pas initialisée. La raison pour laquelle extern est utilisé pour spécifier une variable dans un programme pour la déclarer avec une liaison externe.
Un programme simple montrant les classes de stockage externe :
#include <stdio.h>
externe int je ;
int main()
{
printf ("je : %d", je );
}
int je = 1 ;
Explication:

Dans le programme C ci-dessus, si extern int i est supprimé, il y aura une erreur "Identifiant non déclaré 'i' car la variable i est définie après avoir été utilisée dans printf. Le spécificateur extern indique au compilateur que la variable i a été définie et est déclarée ici.
Si vous changez extern int i; à extern int i = 5; vous obtiendrez une erreur "Redéfinition de 'i'" car le spécificateur externe n'initialise pas une variable.
Lisez aussi: Top 7 des idées de projets passionnantes en C pour les débutants
Derniers mots
Cet article détaille le concept de classes de stockage en C et vous explique en quoi ses types diffèrent les uns des autres. Quand utiliser une classe de stockage particulière dépend de l'affectation et de la portée, de la durée de vie et de la visibilité de la variable avec laquelle vous traitez.
Si vous souhaitez en savoir plus et avez besoin du mentorat d'experts de l'industrie, consultez le diplôme PG upGrad & IIIT Banglore en développement de logiciels Full-Stack .
