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) ?
Réponses
Trop de publicités?static
signifie différentes choses dans différents contextes.
-
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++ }
-
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 exemplestatic void foo() { ... }
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.
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.
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.
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, ...