« Programmation C/Classe de stockage » : différence entre les versions
Contenu supprimé Contenu ajouté
Balise : insanités |
|||
Ligne 17 :
=== Classe 'static' ===
L'effet de la classe 'static' dépend de l'endroit où l'objet est déclaré :
* ''Objet local à
Exemple :
Ligne 47 :
i vaut 3 et j vaut 1.
</source>
Il est déconseillé de redéfinir plusieurs fois la même variable statique dans différents blocs, car le résultat peut être surprenant :
<source lang="c">
#include <stdio.h>
void toto(void) {
static char toto = 'A';
printf("deb fun: %c\n", toto);
{
printf("deb block: %c\n", toto);
static char toto = 'M';
printf("fin block: %c\n", toto);
toto ++;
}
toto++;
printf("fin fun: %c\n", toto);
}
int main(void)
{
toto();
toto();
return 0;
}
</source>
Affiche
<source>
deb fun: A
deb bloc: A
fin bloc: M
fin fun: B
deb fun: B
deb bloc: B
fin bloc: N
fin fun: C
</source>
On voit que la durée de vie de la variable de bloc statique ne commence qu'à partir de sa déclaration, même si la déclaration n'est exécutée qu'une fois au cours du programme.
* ''Objet global et fonction'' : comme une variable globale est déjà persistante, le mot-clé <code>static</code> aura pour effet de limiter la portée de la variable ou de la fonction au seul fichier où elle est déclarée, toujours dans le but de garantir un certain niveau d'encapsulation.
|