1421 votes

Que signifie "statique" dans un programme C ?

J'ai vu le mot static utilisé à différents endroits dans le code C ; est-ce comme une fonction/classe statique en C# (où la mise en œuvre est partagée entre plusieurs objets) ?

19voto

m-sharp Points 4349

static signifie différentes choses dans différents contextes.

  1. Vous pouvez déclarer une variable statique dans une fonction C. Cette variable n'est visible que dans la fonction, mais elle se comporte comme une variable globale en ce sens qu'elle n'est initialisée qu'une seule fois et qu'elle conserve sa valeur. Dans cet exemple, chaque fois que vous appelez foo() il imprimera un nombre croissant. La variable statique n'est initialisée qu'une seule fois.

    void foo ()
    {
    static int i = 0;
    printf("%d", i); i++
    }
  2. Une autre utilisation de static est lorsque vous implémentez une fonction ou une variable globale dans un fichier .c mais que vous ne voulez pas que son symbole soit visible en dehors du fichier .obj généré par le fichier, par exemple

    static void foo() { ... }

18voto

OscarRyz Points 82553

De Wikipedia :

Dans le langage de programmation C, statique est utilisé avec les variables globales et les fonctions pour définir leur portée sur le fichier contenant. Dans les variables locales, static est utilisé pour stocker la variable dans la mémoire allouée statiquement au lieu de la mémoire allouée automatiquement. Bien que le langage ne dicte pas l'implémentation de l'un ou l'autre type de mémoire, la mémoire allouée statiquement est généralement réservée dans le segment de données du programme au moment de la compilation, tandis que la mémoire allouée automatiquement est normalement implémentée comme une pile d'appels transitoire.

11voto

Sam Hoice Points 1766

Si vous déclarez une variable dans une fonction statique, sa valeur ne sera pas stockée sur la pile d'appel de la fonction et sera toujours disponible lorsque vous appellerez à nouveau la fonction.

Si vous déclarez une variable globale statique, sa portée sera limitée à l'intérieur du fichier dans lequel vous l'avez déclarée. C'est un peu plus sûr qu'une variable globale ordinaire qui peut être lue et modifiée dans tout le programme.

5voto

ant2009 Points 530

Si vous déclarez ceci dans un fichier mytest.c :

static int my_variable;

Alors cette variable ne peut être vue qu'à partir de ce fichier. La variable ne peut être exportée nulle part ailleurs.

Si vous déclarez à l'intérieur d'une fonction, la valeur de la variable gardera sa valeur chaque fois que la fonction sera appelée.

Une fonction statique ne peut pas être exportée depuis l'extérieur du fichier. Ainsi, dans un fichier *.c, vous cachez les fonctions et les variables si vous les déclarez statiques.

5voto

En C, le terme static a deux significations, selon la portée de son utilisation. Dans la portée globale, lorsqu'un objet est déclaré au niveau du fichier, cela signifie que cet objet n'est visible que dans ce fichier.

Dans toute autre portée, il déclare un objet qui conservera sa valeur entre les différents moments où l'on entre dans la portée particulière. Par exemple, si un int est déclaré dans une procédure :

void procedure(void)
{
   static int i = 0;

   i++;
}

la valeur de 'i' est initialisée à zéro lors du premier appel de la procédure, et la valeur est conservée à chaque fois que la procédure est appelée. si 'i' était imprimé, il sortirait une séquence de 0, 1, 2, 3, ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X