Bonsoir,
Pourquoi est-il impossible d'initialiser une variable statique avec la valeur d'une autre variable statique ?
int variable = 5;
int variable2 = variable;
int main ()
{
return 0;
}
error C2099: l'initialiseur n'est pas une constante
Combien cela coûte-t-il au total ? Quelles aides apportent l'état et les acteurs du marché pour alléger cette charge non choisie ? Tous les détails sur Commentçamarche.net.
Je suppose que tu voulais mettre: static int variable2 = variable;
On ne peux pas initialiser un variable statique comme une autre variable. Pourquoi?
J'ai une explication, mais je ne suis pas certain de sa véracité.
Ce qui est sûr, c'est qu'une variable statique est localisée dans le segment de données alors que les variables automatiques sont localisées dans la pile. Lorsqu'une variable automatique est construite (c'est-à-dire lorsque le programme entre dans le bloc dans laquelle elle est définie), une place est réservée pour elle dans la pile et une valeur y est éventuellement affectée; lors de la sortie du bloc, il suffit simplement de supprimer la place en modifiant la valeur de la pile. Pour une variable statique, c'est différent; il n'y a pas de construction de la variable; le bloc de données qui est sur le disque est simplement copié en mémoire dans le segment de données. Il faut donc qu'au moment de la compilation la valeur soit connue, cette valeur ne peut donc qu'être déjà constante et ne peut donc dépendre de la valeur d'une variable.
C'est comme cela que je l'interprète... mais est-ce bien la bonne?
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.