Utilisation de variable static

Résolu
LUFFYroooo Messages postés 14 Statut Membre -  
LUFFYroooo Messages postés 14 Statut Membre -
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

  1. LUFFYroooo Messages postés 14 Statut Membre
     
    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
  2. Utilisateur anonyme
     
    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
    1. LUFFYroooo Messages postés 14 Statut Membre
       
      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
      1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102 > LUFFYroooo Messages postés 14 Statut Membre
         
        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
      2. LUFFYroooo Messages postés 14 Statut Membre > Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention  
         
        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