Utilisation de variable static

Résolu/Fermé
LUFFYroooo Messages postés 14 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 6 juillet 2017 - Modifié par LUFFYroooo le 19/02/2017 à 04:56
LUFFYroooo Messages postés 14 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 6 juillet 2017 - 23 févr. 2017 à 02:21
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


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

LUFFYroooo Messages postés 14 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 6 juillet 2017
Modifié par LUFFYroooo le 19/02/2017 à 04:59
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.
0
Utilisateur anonyme
19 févr. 2017 à 10:33
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
0
LUFFYroooo Messages postés 14 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 6 juillet 2017
Modifié par LUFFYroooo le 19/02/2017 à 22:20
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.
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101 > LUFFYroooo Messages postés 14 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 6 juillet 2017
20 févr. 2017 à 08:59
Le 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.
0
LUFFYroooo Messages postés 14 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 6 juillet 2017 > Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023
23 févr. 2017 à 02:21
Ok 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 !
0