Classes de stockage en C : Auto, Extern, Static, Register (Exemples)

Qu’est-ce que la classe de stockage en C ?

Une classe de stockage représente la visibilité et l'emplacement d'une variable. Il indique à partir de quelle partie du code on peut accéder à une variable. Une classe de stockage en C est utilisée pour décrire les éléments suivants :

  • La portée variable.
  • L'emplacement où la variable sera stockée.
  • La valeur initialisée d'une variable.
  • La durée de vie d'une variable.
  • Qui peut accéder à une variable ?

Ainsi, une classe de stockage est utilisée pour représenter les informations sur une variable.

NOTE: Une variable n'est pas seulement associée à un Type de données, sa valeur mais aussi une classe de stockage.

Quels sont les types de classes de stockage en C ?

Il existe au total quatre types de classes de stockage standard. Le tableau ci-dessous représente les classes de stockage en C.

Classe de stockage Interet
auto Il s'agit d'une classe de stockage par défaut.
externe C'est une variable globale.
statique Il s'agit d'une variable locale capable de renvoyer une valeur même lorsque le contrôle est transféré à l'appel de fonction.
vous inscrire C'est une variable qui est stockée dans un registre.

Classe de stockage automatique en C

Les variables définies à l'aide de la classe de stockage automatique sont appelées variables locales. Auto signifie classe de stockage automatique. Une variable est dans la classe de stockage automatique par défaut si elle n'est pas explicitement spécifiée.

La portée d'une variable automatique est limitée au bloc particulier uniquement. Une fois le contrôle sorti du bloc, l'accès est détruit. Cela signifie que seul le bloc dans lequel la variable auto est déclarée peut y accéder.

Un mot-clé auto est utilisé pour définir une classe de stockage automatique. Par défaut, une variable automatique contient une valeur inutile.

Example, auto int age;

Le programme ci-dessous définit une fonction avec deux variables locales

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

Nous prenons un autre programme qui montre le niveau de portée « niveau de visibilité » pour les variables automatiques dans chaque code de bloc qui sont indépendamment les unes des autres :

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

SORTIE:

 3 2 1

Classe de stockage externe en C

Extern signifie classe de stockage externe. La classe de stockage externe est utilisée lorsque nous avons des fonctions ou des variables globales partagées entre deux ou plusieurs fichiers.

Mots-clés externe est utilisé pour déclarer une variable globale ou une fonction dans un autre fichier pour fournir la référence d'une variable ou d'une fonction déjà définie dans le fichier d'origine.

Les variables définies à l'aide d'un mot-clé extern sont appelées variables globales. Ces variables sont accessibles tout au long du programme. Notez que la variable externe ne peut pas être initialisée, elle a déjà été définie dans le fichier d'origine.

Example, extern void display();

Premier fichier : main.c

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

Deuxième fichier : original.c

#include <stdio.h>
i=48;

Résultat:

 value of the external integer is = 48


Afin de compiler et d'exécuter le code ci-dessus, suivez les étapes ci-dessous

Étape 1) Créer un nouveau projet,

  1. Sélectionnez l'application console
  2. Cliquez sur Aller

Classe de stockage externe en C

Étape 2) Sélectionnez C et cliquez sur Suivant

Classe de stockage externe en C

Étape 3) Cliquez Sur Suivant

Classe de stockage externe en C

Étape 4) Entrez les détails et cliquez sur Suivant

Classe de stockage externe en C

Étape 5) Cliquez sur Terminer

Classe de stockage externe en C

Étape 6) Mettez le code principal comme indiqué dans le programme précédent dans le fichier main.c et enregistrez-le

Classe de stockage externe en C

Étape 7) Créez un nouveau fichier C [Fichier -> nouveau -> Fichier vide, enregistrez-le (sous original.c) et ajoutez-le au projet actuel en cliquant sur « OK » dans la boîte de dialogue.

Classe de stockage externe en C

Étape 8) Mettez et enregistrez le code C du fichier original.c montré dans l'exemple précédent sans la fonction main().

Classe de stockage externe en C

Étape 9) Construisez et exécutez votre projet. Le résultat est montré dans la figure suivante

Classe de stockage externe en C

Classe de stockage statique en C

Les variables statiques sont utilisées dans la fonction/fichier en tant que variables statiques locales. Ils peuvent également être utilisés comme variable globale

  • Une variable locale statique est une variable locale qui conserve et stocke sa valeur entre les appels de fonction ou le bloc et reste visible uniquement par la fonction ou le bloc dans lequel elle est définie.
  • Les variables globales statiques sont des variables globales visibles uniquement au fichier dans lequel il est déclaré.
Example: static int count = 10;

Gardez à l’esprit que la variable statique a une valeur initiale par défaut nulle et n’est initialisée qu’une seule fois dans sa vie.

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

Résultat:

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

Les variables globales sont accessibles dans tout le fichier tandis que les variables statiques ne sont accessibles qu'à la partie particulière d'un code.

La durée de vie d'une variable statique réside dans l'ensemble du code du programme. Une variable déclarée ou initialisée à l'aide du mot-clé static contient toujours zéro comme valeur par défaut.

Enregistrer la classe de stockage en C

Vous pouvez utiliser la classe de stockage de registre lorsque vous souhaitez stocker des variables locales dans des fonctions ou des blocs dans des registres CPU au lieu de RAM pour avoir un accès rapide à ces variables. Par exemple, les « compteurs » sont de bons candidats pour être stockés dans le registre.

Example: register int age;

Le mot-clé vous inscrire est utilisé pour déclarer une classe de stockage de registre. Les variables déclarées à l’aide de la classe de stockage de registre ont une durée de vie tout au long du programme.

Elle est similaire à la classe de stockage automatique. La variable est limitée au bloc particulier. La seule différence est que les variables déclarées à l'aide de la classe de stockage des registres sont stockées dans les registres du processeur au lieu d'une mémoire. Register a un accès plus rapide que celui de la mémoire principale.

Les variables déclarées à l'aide de la classe de stockage de registre n'ont pas de valeur par défaut. Ces variables sont souvent déclarées au début d'un programme.

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

SORTIE:

error: address of register variable 'weight' requested

Le tableau suivant résume les principales fonctionnalités de chaque classe de stockage qui sont couramment utilisées en programmation C.

Classe de stockage Déclaration Stockage Valeur initiale par défaut Domaine À vie
auto À l'intérieur d'une fonction/bloc Mémoire Imprévisible Dans la fonction/le bloc Dans la fonction/le bloc
vous inscrire À l'intérieur d'une fonction/bloc Registres du processeur Déchets Dans la fonction/le bloc Dans la fonction/le bloc
externe En dehors de toutes les fonctions Mémoire Zero Compléter le fichier et les autres fichiers où la variable est déclarée comme externe durée d'exécution du programme
Statique (local) À l'intérieur d'une fonction/bloc Mémoire Zero Dans la fonction/le bloc durée d'exécution du programme
Statique (mondial) En dehors de toutes les fonctions Mémoire Zero Global durée d'exécution du programme

Résumé

Dans ce tutoriel, nous avons abordé les classes de stockage en C, pour résumer :

  • Une classe de stockage en C est utilisée pour représenter des informations supplémentaires sur une variable.
  • La classe de stockage représente la portée et la durée de vie d'une variable.
  • Il indique également qui peut accéder à une variable et depuis où ?
  • Auto, extern, register, static sont les quatre classes de stockage différentes dans un programme C.
  • Un spécificateur de classe de stockage dans Langage C est utilisé pour définir des variables, des fonctions et des paramètres.
  • auto est utilisé pour une variable locale définie dans un bloc ou une fonction
  • Le registre est utilisé pour stocker la variable dans les registres du processeur plutôt que dans l'emplacement mémoire pour un accès rapide.
  • Statique est utilisé pour les variables globales et locales. Chacun a son cas d’utilisation au sein d’un programme C.
  • Extern est utilisé pour le partage de données entre les fichiers de projet C.

Résumez cet article avec :