La variable static n'a rien avoir avec une variable globale.
chaque variable possède une durée de vie lorsque tu rentre dans un bloc (fonction, if, while, for, {})
toutes les variable crée dans se bloc sont détruite a sa sortie avec son contenu. grace au mot cles static
la variable n'est pas détruit ainsi lorsque que l'on repasse dans le bloc ou elle se trouve comme une fonction
on récupère les données entré lors du précédent appel.
Exemple :
void fonction () {
//pour cette variable me sert par exemple a compter le nombre de fois que j'appelle cette focntion
static compteur=1 ;
printf("Fonction appeler %d fois\n", compteur) ;
int p ;
//dans se for coucou est détruit a chaque boucle et un nouveau est créé résultat toujours égal a 1
for (p=0 ; p<5 ; p++) {
int coucou=0 ;
coucou++ ;
printf("coucou1=%d\n", coucou) ;
}
//dans se for coucou est sauvegardé grace au mot cles static chaque boucle on a l'ancien contenu de la boucle
// précédente donc coucou= {1, 2, 3, 4, 5}
for (p=0 ; p<5 ; p++) {
static int coucou=0 ;
coucou++ ;
printf("coucou2=%d\n", coucou) ;
}
compteur++ ;
}
Biensûr la porté de la variable static est la même qu'un variable local normal. Doonc en dehors du for je ne peut utilisé la variable coucou idem pour compteur visible uniquement dans la fonction.
( static int coucou=0 ;) le '=0' ne seras appelle qu'une fois si la variable n'existe pas alors l'initialisation a lieu.
J'espère avoir était claire pour toi.
une variable global ne peut être initialisé par une autre variable en dehors d'une fonction.
Sauf si la variable est créé par un #define qui définit une variable constante.