static : allonge la durée de vie d'une variable locale
static : limite la portée de variable de sous-programme
Mot réservé du langage C
Syntaxe:
- static <définition_donnée> ;
- static <définition_fonction> ;
Description:
En ajoutant le mot réservé static à la déclaration d'une variable dans un bloc, la valeur de la variable n'est pas perdue lors de la sortie du bloc.
Elle est réutilisable à la prochaine entrée le bloc.
Une variable déclarée static n'est initialisée qu'une seule fois.
Un sous-programme, ou un élément de donnée défini en dehors d'un bloc, précédé de l'attribut static n'est connu que dans la portée du fichier en cours de compilation.
Voir aussi:
Exemple:
#include
void sp1() {
int jj=10;
static int stjj=10;
jj += 5;
stjj += 5;
printf(" jj=%d, stjj=%d\n", jj, stjj);
}
int main(void) {
printf("Premier appel : "); sp1();
printf("Deuxième appel : "); sp1();
printf("troisième appel : "); sp1();
return 0;
}
##############################################
/*
Fichier tmp.c :
Les deux noms statnb et main ne seront pas connus en
dehors de ce fichier. Par contre le nom affiche() est
utilisable dans un autre fichier.
*/
static int statnb=5
void affiche() {
printf( "affiche() : statnb=%d", statnb);
}
static int main(){
return 3;
}
###############
/*
Le fichier essai.c, à compiler avec le précédent,
par la commande : cc -o essai essai.c tmp.c
On réalise que le nom affiche est partagé par les deux fichiers,
alors qu'il existe deux zones mémoires distinctes pour chaque
variable statnb.
De même il existe deux sous-programmes appelé main, mais seul
celui de ce fichier est connu de l'édituer de liens.
*/
int statnb=1;
void affiche();
int main(){
printf( "Dans ce fichier : statnb=%d\n", statnb);
printf( "Dans l'autre fichier, ");
affiche();
}