English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La classe de stockage définit les variables dans un programme C/La portée (visibilité) et la durée de vie des fonctions. Ces modificateurs sont placés avant le type qu'ils modifient. Voici une liste des classes de stockage disponibles dans un programme C :
auto
register
static
extern
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é qu'à l'intérieur des fonctions, c'est-à-dire que auto ne peut modifier que les variables locales.
register La classe de stockage est utilisée pour définir les variables locales stockées dans un registre plutôt que dans la RAM. Cela signifie que la taille maximale de la variable est égale à la taille du registre (généralement un mot) et qu'on ne peut pas lui appliquer l'opérateur unaire '&' (car elle n'a pas d'adresse mémoire).
{ register int miles; }
Le registre est utilisé uniquement pour les variables nécessitant un accès rapide, comme les compteurs. Il convient également de noter que définir 'register' ne signifie pas que la variable sera stockée dans un registre, cela signifie qu'elle peut être stockée dans un registre, ce qui dépend des limitations matérielles et des implémentations.
static La classe de stockage indique au compilateur de maintenir l'existence des variables locales au cours du cycle de vie du programme, sans avoir besoin de les créer et de les détruire à chaque fois qu'elles entrent et quittent leur aire de jeu. Par conséquent, l'utilisation du modificateur static pour les variables locales permet de maintenir la valeur de la variable entre les appels de fonction.
Le modificateur static peut également être appliqué aux variables globales. Lorsqu'il modifie une variable globale, il limite l'aire de jeu de la variable à l'intérieur du fichier où elle est déclarée.
Une variable ou une méthode static déclarée globalement peut être appelée par toute fonction ou méthode, tant que celles-ci apparaissent dans le même fichier que la variable ou la méthode static.
L'exemple suivant montre l'utilisation de l'attribut static pour les variables globales et locales :
#include <stdio.h> /* Déclaration de la fonction */ void func1(void); static int count = 12; /* variable globale - static est le type par défaut */ int main() { while (count--) { func1(); } return 0; } void func1(void) { /* 'hello' est 'func1La variable locale - n'est initialisé qu'une seule fois * Chaque appel de la fonction 'func1'La valeur de 'hello' n'est pas réinitialisée. */ static int hello = 4; hello++; printf("%d, count est %d\n", hello, count); }
Dans cet exemple, count peut être utilisé en tant que variable globale à l'intérieur de la fonction, hello utilisant l'attribut static ne sera pas réinitialisé à chaque appel.
Il se peut que vous ne puissiez pas comprendre cet exemple, car j'ai utilisé des fonctions et des variables globales, deux concepts que nous n'avons pas encore expliqués jusqu'à présent. Même si vous ne pouvez pas tout comprendre maintenant, ce n'est pas grave, dans les prochaines sections, nous les expliquerons en détail. Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
hello vaut 5 count vaut 11 hello vaut 6 count vaut 10 hello vaut 7 count vaut 9 hello vaut 8 count vaut 8 hello vaut 9 count vaut 7 hello vaut 10 count vaut 6 hello vaut 11 count vaut 5 hello vaut 12 count vaut 4 hello vaut 13 count vaut 3 hello vaut 14 count vaut 2 hello vaut 15 count vaut 1 hello vaut 16 count vaut 0
extern La classe de stockage est utilisée pour fournir une référence à une variable globale, visible dans tous les fichiers du programme. Lorsque vous utilisez extern Lorsque, pour les variables non initialisées, le nom de la variable pointe vers une position de stockage définie précédemment.
Lorsque vous avez plusieurs fichiers et que vous avez défini une variable ou une fonction globale qui peut être utilisée dans d'autres fichiers, vous pouvez l'utiliser dans d'autres fichiers extern Pour obtenir une référence à une variable ou une fonction déjà définie. On peut comprendre ainsi,extern Il est utilisé pour déclarer une variable ou une fonction globale dans un autre fichier.
L'attribut extern est généralement utilisé lorsque deux ou plusieurs fichiers partagent la même variable ou fonction globale, comme ci-dessous :
Premier fichier : main.c
#include <stdio.h> int count ; extern void write_extern(); int main() { count = 5; write_extern(); }
Deuxième fichier : support.c
#include <stdio.h> extern int count; void write_extern(void) { printf("count est %d\n", count); }
Ici, le deuxième fichier contient extern La clé est utilisée pour déclarer ce qui a été défini dans le premier fichier main.c count. Maintenant, compilez ces deux fichiers, comme suit :
$ gcc main.c support.c
Ce qui produira a.out Programme exécutable, qui produit les résultats suivants lors de son exécution :
count est 5