Classe de stockage C


Les classes de stockage définissent la portée (visibilité) et la durée de vie des variables/fonctions dans un programme C. Ces spécificateurs sont placés avant le type qu'ils modifient. Les classes de stockage disponibles dans les programmes C sont répertoriées ci-dessous :

  • auto

  • register

  • static

  • externe

classe de stockage automatique

auto la classe de stockage est la classe de stockage par défaut pour toutes les variables locales.

{   int mount;   auto int month;}

L'exemple ci-dessus définit deux variables avec la même classe de stockage. Auto ne peut être utilisé que dans les fonctions, c'est-à-dire que auto ne peut modifier que les variables locales.

classe de stockage de registre

registre La classe de stockage est utilisée pour définir des variables locales qui sont stockées dans des registres au lieu de la RAM. Cela signifie que la taille maximale d'une variable est égale à la taille du registre (généralement un mot) et que l'opérateur unaire '&' ne peut pas lui être appliqué (car il n'a pas d'emplacement mémoire).

{   register int  miles;}

Les registres ne sont utilisés que pour les variables auxquelles il faut accéder rapidement, telles que les compteurs. Il convient également de noter que définir « registre » ne signifie pas que la variable sera stockée dans un registre, cela signifie que la variable peut être stockée dans un registre, en fonction des limitations du matériel et de l'implémentation.

Classe de stockage statique

static La classe de stockage demande au compilateur de conserver une variable locale active pendant toute la durée de vie du programme, sans exiger qu'elle soit utilisée à chaque fois. les entrées et les sorties Les domaines sont créés et détruits. Par conséquent, utiliser static pour modifier une variable locale conserve sa valeur entre les appels de fonction. Le modificateur

static peut également être appliqué aux variables globales. Lorsque static modifie une variable globale, il limite la portée de la variable au fichier dans lequel elle est déclarée.

En programmation C, lorsque static est utilisé sur un membre de données de classe, une seule copie du membre sera partagée par tous les objets de la classe.

#include <stdio.h> /* 函数声明 */void func(void); static int count = 5; /* 全局变量 */
 main(){   while(count--)   {
      func();   }   return 0;}/* 函数定义 */void func( void ){   static int i = 5; /* 局部静态变量 */
   i++;

   printf("i is %d and count is %d\n", i, count);}

Peut-être que vous ne comprenez pas encore cet exemple, car j'ai utilisé des fonctions et des variables globales, et ces deux concepts n'ont pas été expliqués jusqu'à présent. Même si vous ne le comprenez pas entièrement maintenant, cela n’a pas d’importance. Nous l’expliquerons en détail dans les chapitres suivants. Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

i is 6 and count is 4i is 7 and count is 3i is 8 and count is 2i is 9 and count is 1i is 10 and count is 0

classe de stockage externe

extern La classe de stockage est utilisée pour fournir une référence à un fichier global variable, les variables globales sont visibles par tous les fichiers du programme. Lorsque vous utilisez 'extern', pour les variables qui ne peuvent pas être initialisées, le nom de la variable pointe vers un emplacement de stockage préalablement défini.

Lorsque vous avez plusieurs fichiers et définissez une variable globale ou une fonction qui peut être utilisée dans d'autres fichiers, vous pouvez utiliser extern dans d'autres fichiers pour obtenir la variable ou la citation de fonction définie. On comprend que extern est utilisé pour déclarer une variable globale ou une fonction dans un autre fichier. Le modificateur

extern est généralement utilisé lorsqu'il y a deux fichiers ou plus partageant la même variable globale ou fonction, comme indiqué ci-dessous :

Premier fichier : c<. 🎜>

#include <stdio.h> int count ;extern void write_extern();
 main(){
   count = 5;
   write_extern();}

Deuxième fichier : support.c

#include <stdio.h> extern int count; void write_extern(void){
   printf("count is %d\n", count);}

Ici, le mot clé

extern dans le deuxième fichier Utilisé pour déclarer count qui a été défini dans le premier fichier main.c. Maintenant, compilez ces deux fichiers comme suit :

 $gcc main.c support.c

Cela produira le programme exécutable

a.out Lorsque le programme sera exécuté, il produira les résultats suivants :

5
<. 🎜>