Utilisation de variable static [Résolu/Fermé]

Signaler
Messages postés
14
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
6 juillet 2017
-
LUFFYroooo
Messages postés
14
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
6 juillet 2017
-
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

Messages postés
14
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
6 juillet 2017

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.
Messages postés
542
Date d'inscription
mercredi 9 mars 2016
Statut
Membre
Dernière intervention
8 mars 2018
76
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
LUFFYroooo
Messages postés
14
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
6 juillet 2017

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.
Dalfab
Messages postés
430
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
8 janvier 2020
50 > LUFFYroooo
Messages postés
14
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
6 juillet 2017

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.
LUFFYroooo
Messages postés
14
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
6 juillet 2017
> Dalfab
Messages postés
430
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
8 janvier 2020

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 !