logo

Variables statiques en C

Les variables statiques ont la propriété de conserver leur valeur même après être hors de leur portée ! Par conséquent, une variable statique conserve sa valeur précédente dans sa portée précédente et n'est pas réinitialisée dans la nouvelle portée.

Syntaxe:



  static   data_type   var_name   = var_value;>

Voici quelques faits intéressants sur les variables statiques en C :

à la méthode de chaîne Java

1) Une variable int statique reste en mémoire pendant l'exécution du programme. Une variable normale ou automatique est détruite lorsqu'un appel de fonction où la variable a été déclarée est terminé.
Par exemple, nous pouvons utiliser static int pour compter le nombre de fois qu’une fonction est appelée, mais une variable auto ne peut pas être utilisée à cette fin.

Exemple



C






// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }>

>

>

Sortir

1 2>

Le programme ci-dessus imprime 1 2 car les variables statiques ne sont initialisées qu'une seule fois et restent actives jusqu'à la fin du programme. C'est pourquoi ils peuvent conserver leur valeur entre plusieurs appels de fonction.

Essayons le même code pour la variable automatique locale.

Exemple

diagramme uml java

C




// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }>

tous les 4 mois
>

>

Sortir

1 1>

2) Les variables statiques se voient allouer de la mémoire dans le segment de données, pas dans le segment de pile. Voir le disposition de la mémoire des programmes C pour plus de détails.

3) Les variables statiques (comme les variables globales) sont initialisées à 0 si elles ne sont pas initialisées explicitement. Par exemple, dans le programme ci-dessous, la valeur de x est imprimée comme 0, tandis que la valeur de y est quelque chose de déchet. Voir ce pour plus de détails.

Exemple

C




// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d %d'>, x, y);> }>

>

Java lance une exception
>

Sortir

0  [some_garbage_value]>

4) En C, les variables statiques ne peuvent être initialisées qu'à l'aide de littéraux constants. Par exemple, le programme suivant échoue lors de la compilation. Voir ce pour plus de détails.

Exemple

C




tous les 4 mois

#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }>

>

>

Sortir

In function 'main': 9:5: error: initializer element is not constant  static int i = initializer();  ^>

Note: Veuillez noter que cette condition ne s’applique pas en C++. Donc, si vous enregistrez le programme en tant que programme C++, il se compilera et fonctionnera correctement.

5) Les variables et fonctions globales statiques sont également possibles en C/C++. Le but de ceux-ci est de limiter la portée d’une variable ou d’une fonction à un fichier. Prière de se référer à Fonctions statiques en C pour plus de détails.

6) Les variables statiques ne doivent pas être déclarées à l'intérieur d'une structure. La raison en est que le compilateur C nécessite que tous les éléments de la structure soient placés ensemble (c'est-à-dire que l'allocation de mémoire pour les membres de la structure doit être contiguë). Il est possible de déclarer une structure à l'intérieur de la fonction (segment de pile) ou d'allouer de la mémoire de manière dynamique (segment de tas) ou elle peut même être globale (BSS ou segment de données). Quoi qu'il en soit, tous les membres de la structure doivent résider dans le même segment de mémoire car la valeur de l'élément de structure est récupérée en comptant le décalage de l'élément par rapport à l'adresse de début de la structure. Séparer un seul membre en un segment de données va à l’encontre de l’objectif de la structure et il est possible d’avoir une structure entière aussi statique.

Articles Liés:

  • Mot-clé statique en C++
  • Quiz sur les mots-clés statiques
  • Données membres statiques en C++
  • Quand les objets statiques sont-ils détruits ?
  • Faits intéressants sur les fonctions membres statiques
  • Les fonctions statiques peuvent-elles être virtuelles ?
  • Comparaison de mots-clés statiques en C++ et Java
  • Fonctions statiques en C