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 : auto, extern, static, register expliqués

Qu'est-ce qu'une classe de stockage en C ?

Une classe de stockage définit la portée, l'emplacement, l'initialisation, la durée de vie et l'accessibilité d'une variable. En C, chaque variable n'est pas seulement typée mais aussi assignée à une classe de stockage qui détermine où et comment elle peut être accédée.

Il y a quatre classes de stockage standard :

Classe de stockage auto

Les variables déclarées avec auto (le défaut pour les variables locales) existent seulement dans le bloc où elles sont définies. Elles sont détruites quand le bloc se termine, et elles sont initialisées avec une valeur indéterminée sauf si explicitement définies.

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

Démonstration de portée :

#include <stdio.h>
int main(void) {
    auto int j = 1;
    {
        auto int j = 2;
        {
            auto int j = 3;
            printf("%d ", j); // affiche 3
        }
        printf("\t%d ", j); // affiche 2
    }
    printf("%d\n", j); // affiche 1
}

Sortie : 3 2 1

Classe de stockage extern

Le mot-clé extern déclare une variable ou fonction qui est définie dans une autre unité de traduction. Il permet le partage de données entre fichiers sources.

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

/* original.c */
#include <stdio.h>
int i = 48; // définition

Compilez les deux fichiers ensemble : gcc main.c original.c -o program. L'exécution de ./program affiche :

value of the external integer is = 48

Classe de stockage static

Les variables statiques conservent leur valeur pour la durée du programme. Elles peuvent être utilisées comme statiques locales ou statiques à portée de fichier.

/* global static */
static int counter = 7;
void next(void) {
    /* local static */
    static int iteration = 13;
    iteration++;
    printf("iteration=%d and counter=%d\n", iteration, counter);
}
int main(void) {
    while (counter < 10) {
        next();
        counter++;
    }
    return 0;
}

Sortie :

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

Classe de stockage register

Utilisez register quand une variable doit être accédée fréquemment et peut tenir dans un registre CPU. Le compilateur peut ignorer l'indication si les registres sont rares.

#include <stdio.h>
int main(void) {
    register int weight;
    /* tenter de prendre son adresse échoue */
    // int *ptr = &weight; // erreur de compilation
    return 0;
}

La compilation du code produit :

error: address of register variable 'weight' requested

Tableau récapitulatif

Classe de stockage Contexte de déclaration Emplacement de stockage Valeur par défaut Portée Durée de vie
autodans une fonction/blocMémoireImprévisibleFonction/blocFonction/bloc
registerdans une fonction/blocRegistre CPUImprévisibleFonction/blocFonction/bloc
externhors de toutes fonctionsMémoireZéroProgramme entierTemps d'exécution du programme
static (local)dans une fonction/blocMémoireZéroFonction/blocTemps d'exécution du programme
static (global)hors de toutes fonctionsMémoireZéroFichierTemps d'exécution du programme

Points clés à retenir

Langue C

  1. Classes et objets C# : Fondations pour une POO robuste
  2. Mot-clé Static C# : Maîtriser les variables, méthodes et classes statiques
  3. Comprendre les classes imbriquées C# : Définition, utilisation et héritage
  4. Classes et objets C++ : Guide pratique de la programmation orientée objet
  5. Fonctions amies et classes amies en C++ : Maîtriser le contrôle d'accès
  6. Maîtriser les templates de classe en C++ : Guide pratique
  7. Comprendre les classes de stockage en C : Portée, durée de vie et performance
  8. Comprendre les classes de stockage en C : Portée, durée de vie et utilisation
  9. Comprendre les classes de stockage en C++ : Portée, durée de vie et utilisation