Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Comprendre les classes de stockage en C : Portée, durée de vie et performance

Comprendre les classes de stockage en C

Explorez comment les classes de stockage automatique, externe, statique et register définissent la portée, la durée de vie et la performance d'une variable en C.

Variables automatiques (locales)

Les variables déclarées à l'intérieur d'un bloc sont automatiques, aussi connues comme variables locales. Elles n'existent que dans ce bloc et sont détruites quand le bloc se termine.

#include <stdio.h>
int main(void) {
    for (int i = 0; i < 5; ++i) {
        printf("Programmation C\n");
    }
    // Erreur : i n'est pas déclaré dans cette portée
    printf("%d", i);
    return 0;
}

L'exécution de ce programme résulte en une erreur identificateur i non déclaré car i est déclaré seulement à l'intérieur du bloc de la boucle for.

int main() {
    int n1; // local à main()
}
void func() {
    int n2; // local à func()
}

Ici, n1 est inaccessible à l'intérieur de func(), et n2 est inaccessible à l'intérieur de main().

Variables globales (externes)

Les variables déclarées en dehors de toutes les fonctions sont globales ou externes. Elles peuvent être accédées depuis n'importe quelle fonction dans la même unité de traduction. Quand une variable globale est définie dans un fichier mais utilisée dans un autre, le mot-clé extern signale que la définition réside ailleurs.

Exemple : Variable globale

#include <stdio.h>
void afficher();
int n = 5; // variable globale
int main() {
    ++n;
    afficher();
    return 0;
}
void afficher() {
    ++n;
    printf("n = %d\n", n);
}

Sortie

n = 7

Si n est défini dans fichier1.c et utilisé dans fichier2.c, ajoutez extern int n; au sommet de fichier2.c pour éviter une erreur de compilation.

Variables register

Le mot-clé register suggère au compilateur de stocker la variable dans un registre CPU pour accélérer l'accès. Les compilateurs modernes effectuent une optimisation agressive, rendant souvent l'indication inutile. Utilisez register seulement quand le profilage indique un goulot d'étranglement critique sur les systèmes embarqués.

Variables statiques

Les variables statiques sont déclarées avec static et conservent leur valeur pour toute l'exécution du programme. Elles sont initialisées une seule fois, au démarrage du programme, et restent en existence jusqu'à la terminaison du programme.

Exemple : Variable statique

#include <stdio.h>
void afficher();
int main() {
    afficher();
    afficher();
}
void afficher() {
    static int c = 1;
    c += 5;
    printf("%d ", c);
}

Sortie

6 11

Au premier appel, c est initialisé à 1, puis augmenté à 6. Au second appel, c retient sa valeur précédente de 6, est augmenté à 11 et affiché.

À la portée de fichier, une déclaration static donne à la variable une liaison interne, la rendant invisible aux autres unités de traduction — une fonctionnalité utile pour l'encapsulation.

Selon la norme ISO C, le comportement de static assure une instance unique à travers tous les appels de fonction, ce qui est critique pour les opérations avec état sans pollution globale.

Langue C

  1. Maîtriser les variables C# et types de données primitifs : guide complet
  2. Comprendre la portée des variables en C# : Niveaux classe, méthode et bloc
  3. Mot-clé Static C# : Maîtriser les variables, méthodes et classes statiques
  4. Maîtriser les templates de classe en C++ : Guide pratique
  5. Variables, constantes et littéraux en C : Guide complet
  6. Variables et types de données en C++ : Guide expert sur int, double, char, string, bool
  7. Comprendre les Types de Variables en Java : Guide Complet
  8. Comprendre les variables en C : Types, règles de nommage et gestion mémoire
  9. Comprendre les classes de stockage en C : Portée, durée de vie et utilisation