Utilisation de variable static
Résolu
Bonjour,
Je ne comprend pas comment utiliser le type static pour les variables ce qui me bloque pour un projet et j'aurais donc besoin de votre aide !
source : https://fr.wikibooks.org/wiki/Programmation_C/Classe_de_stockage
D'aprés ce que j'ai compris, cela devrai m'afficher : 123
Malheuresement, cela m'affiche 111 et je bloque la dessus !
Si quelqu'un pourrais m'éclairer ça m'aiderais grandement.
Merci.
Je ne comprend pas comment utiliser le type static pour les variables ce qui me bloque pour un projet et j'aurais donc besoin de votre aide !
source : https://fr.wikibooks.org/wiki/Programmation_C/Classe_de_stockage
int ft_test()
{
static int i;
i = 0;
i++;
ft_putnbr(i);
return(i);
}
int main()
{
ft_test();
ft_test();
ft_test();
return (0);
}
D'aprés ce que j'ai compris, cela devrai m'afficher : 123
Malheuresement, cela m'affiche 111 et je bloque la dessus !
Si quelqu'un pourrais m'éclairer ça m'aiderais grandement.
Merci.
2 réponses
-
Re,
Finalement j'ai compris, mais si la norme nous impose une déclaration comme ceci :
int i;
i = 0;
Comment puis-je faire ?
static int i;
static i = 0;
Cela ne marche pas car ceci est considéré comme un redéclaration, je bloque donc toujours.
Si quelqu'un peut m'aider, j'apprécierais !
Merci. -
Tu parles de quelle norme ?
J'ai essayé ceci :#include <stdio.h> void fonc(){ static int i = 0 ; printf("Fonction appellée %d fois", i ); } int main(void){ fonc(); fonc(); return 0; }
En compilant avec -ansi -pedantic -Wall, mais pas d'erreur ni de warning-
Je suis a 42, et on as une norme a respecter pour la déclaration des variables :
Par exemple :
int i;
i = 0;
Nous n'avons pas le droit de déclarer nos variables comme ceci :
int i = 0;
---------------------------
Du coup pour la static je devrais faire :
static int i;
i = 0;
sauf que ça ne marche pas comme ceci.
------------------------------
Si vous avez une idée !
Et nous devons compiler avec les flags suivant : -Wall -Wextra -Werror
Merci. -
@LUFFYrooooLe problème c'est que les règles intergalactiques sont :
int i = 0: // initialiser dès que possible une variable non statique
static int j = 1; // une statique NE PEUT ETRE INITIALISÉE QUE COMME CELA
int k;
k = 3; // IGNOMINIE, dangereux mais à un sens
Il n'y a pas d'alternative. -
@DalfabOk merci, je pensais a ça mais c'était vraiment la dernière solution ! Ok bah merci ! On dois pas avoir le choix alors !
Merci a vous et bonne soirée !
-