IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

structure en parametre de fonction


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut structure en parametre de fonction
    Bonjour je pense avoir quelques problemes avec les structures

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    typedef struct {
    	   float a;
    	   float b;
    	   float x;
    	   float y;
    } s_parameters;
    int main ()
    {
      s_parameters equa1;
      equa1.a=8;
      equa1.b=7;
      equa1.x=4;
      calcul(equa1);
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    s_parameters calcul(s_parameters equa)
    {
      equa.y=equa.x+equa.b;
      return equa;
    }
    en fait je me perd dans le nom de ma structure si j'utilise typedef, que dois je passer en parametre que dois retourner ma fonction comment dois je affecter les valeurs dans ma fonction?
    Est t il mieux de passer une structure ou un pointeur de structure ?
    Merci davance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Pour répondre à une de tes questions, il vaut mieux passer l'adresse de ta structure en paramètres que la structure elle-même.

    Pour deux raisons:
    - même si ce n'est plus trop un problème sur la plupart des systèmes, le passage de la structure en tant que paramètre consomme de la pile. C'est donc plus gourmand en mémoire et moins rapide à l'exécution.
    - passer l'adresse de ta structure te permet de modifier la structure d'origine (et non une copie de celle-ci)

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Le plus efficace est de passer un pointeur sur ta structure à ta fonction. Ainsi, il vient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    typedef struct {
    	   float a;
    	   float b;
    	   float x;
    	   float y;
    } s_parameters;
     
    int calcul(s_parameters *p_equa)
    {
      int err = 0;
      if (p_equa != NULL)
      {
        p_equa->y=p_equa->x + p_equa->b;
      }
      else
      {
        err = -1;
      }
      return err;
    }
     
    int main (void)
    {
      s_parameters equa1 = {8, 7, 4};
     
      calcul(&equa1);
      return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par sone47
    en fait je me perd dans le nom de ma structure si j'utilise typedef, que dois je passer en parametre que dois retourner ma fonction comment dois je affecter les valeurs dans ma fonction?
    Lorsque tu utilises un typedef comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct {
    	   float a;
    	   float b;
    	   float x;
    	   float y;
    } s_parameters;
    Tu peux déclarer une variable comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    s_parameters blabla; /* Une variable de type s_parameters */
    s_parameters *p_blabla; /* Un pointeur vers une structure s_parameters */
    Ensuite l'accés aux éléments dépend si c'est un pointeur ou non...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    blabla.x = 5; /* On utilise le . */
    p_blabla = &blabla; /* p_blabla pointe sur blabla maintenant */
    p_blabla->y = 4; /* On utilise la -> parce que c'est un pointeur */
    Pour une fonction, il vaut mieux passer par pointeur, car passer la structure résulte en une recopie inutile. L'utilisation du mot clé const peut permettre d'assurer que la fonction ne modifiera pas la structure si cela est nécessaire ou simplement voulu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    int main ()
    {
      s_parameters equa1;
      equa1.a=8;
      equa1.b=7;
      equa1.x=4;
      calcul(&equa1);
      return 0;
    }
     
    void calcul(s_parameters *equa)
    {
      if(equa != NULL) {
        equa->y=equa->x+equa->b;
      }
    }
    Remarque que dans ton code, tu devais récupérer le retour de la fonction calcul pour pouvoir avoir le résultat du calcul... Le fait de passer la structure sans passé par un pointeur provoque une copie superficielle de la structure.

    Donc au retour de la fonction, ta structure de départ n'est pas modifié.

    Jc

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par sone47
    Bonjour je pense avoir quelques problemes avec les structures

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    typedef struct {
    	   float a;
    	   float b;
    	   float x;
    	   float y;
    } s_parameters;
    int main ()
    {
      s_parameters equa1;
      equa1.a=8;
      equa1.b=7;
      equa1.x=4;
      calcul(equa1);
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    s_parameters calcul(s_parameters equa)
    {
      equa.y=equa.x+equa.b;
      return equa;
    }
    en fait je me perd dans le nom de ma structure si j'utilise typedef, que dois je passer en parametre que dois retourner ma fonction comment dois je affecter les valeurs dans ma fonction?
    Est t il mieux de passer une structure ou un pointeur de structure ?
    Merci davance

    oui, il faut toujours passer en argument non pas une structure mais un pointeur vers cette structure. Si tu passes une structure, tu la recopies et c'est long. Si tu passes un pointeur, tu ne recopies qu'un pointeur

    Ton code deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    typedef struct {
    	   float a;
    	   float b;
    	   float x;
    	   float y;
    } s_parameters;
    int main (void)
    {
      s_parameters * equa1=malloc(sizeof(*equa1));
      if(equa1==NULL)
      {
       fprintf(stderr,"Erreur\n");
       exit(EXIT_FAILURE);
      }
      equa1->a=8;
      equa1->b=7;
      equa1->x=4;
      calcul(equa1);
      free(equa1); equa1=NULL;
      return 0;
    }
     
    void calcul(s_parameters * equa)
    {
      equa->y=equa->x+equa->b;
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    ok merci donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    typedef struct {
    	   float a;
    	   float b;
    	   float x;
    	   float y;
    } s_parameters;
    int main ()
    {
      s_parameters equa1;
      equa1.a=8;
      equa1.b=7;
      equa1.x=4;
      s_parameters *p_equa;
      p_equa = &equa1;
      calcul(p_equa);
      return 0;
    }Code :
     
    s_parameters *  calcul(s_parameters * equa)
    {
      equa->y=equa->x+equa->b;
      return equa;
    }
    comme ceci?
    ps: je ne conmprend les erreurs de nom de parametre du premier prog si quelqu'un peut m'aider
    merci

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par salseropom
    oui, il faut toujours passer en argument non pas une structure mais un pointeur vers cette structure. Si tu passes une structure, tu la recopies et c'est long. Si tu passes un pointeur, tu ne recopies qu'un pointeur

    Ton code deviendrait :
    Wow, un malloc pour un exemple aussi simple

    Tu pouvais juste passer le pointeur vers une structure statique non ?

    Jc

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    ok pas besoin de retourner equa.
    merci
    par contre comment dois je nommer les variables que je modifie dans ma fonction si a et b sont tableaux?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void calcul(s_parameters * p)
    {
      for(i=0;i<MAX;i++)
      {
        p->a[i]=0;
      }
    }

  9. #9
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Dans ton cas, pour décider si on doit utiliser des structures ou
    pointeurs de structures, il faut se poser la question de savoir si
    ta fonction modifie la variable equa passée en argument.
    C'est à dire, est-ce que equa est une variable en entrée/sortie
    de ta fonction, ou en entrée seule.

    Par exemple si tu utilise les structures (variable en entrée seule) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main () {
      s_parameters equa1, equa2;
     
      equa1.y=0;
     
      equa1.b=7;
      equa1.x=4;
      equa2 = calcul(equa1);
      printf("equa1.y = %d\n", equa1.y);
      printf("equa2.y = %d\n", equa2.y);
      return 0;
    }
    affichera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    equa1.y = 0
    equa2.y = 11
    Si tu utilise des pointeurs (variable en entrée sortie), alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    s_parameters* calcul(s_parameters *equa) {
      equa->y=equa->x+equa->b;
      return equa;
    }
     
    int main () {
      s_parameters equa1, *equa2;
     
      equa1.y=0;
     
      equa1.b=7;
      equa1.x=4;
      equa2 = calcul(&equa1);
      printf("equa1.y = %d\n", equa1.y);
      printf("equa2->y = %d\n", equa2->y);
      return 0;
    }
    affichera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    equa1.y = 11
    equa2->y = 11
    Ce qui surement plus ce que tu recherches.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    typedef struct s_parameters{
    			 float a[N];
    			 float b[N];
    			 } ;
     
    void main(int argc, char* argv[])
    {
      struct s_parameters equa1;
      equa1.a[0]=0;
      equa1.a[1]=0;
      s_parameters * p_equa=malloc(sizeof(*equa1));
      if(p_equa==NULL)
      {
       fprintf(stderr,"Erreur\n");
       exit(EXIT_FAILURE);
      }
    }
    me donne une erreur sur mon pointeur "undeclared identifier"

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Je n'arrive pas a saisir la difference de mettre le typedef
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void calcul(s_parameters_equa);
    typedef struct {
    			   float a[N];
    			   float b[N];
    } s_parameters;
    void main(int argc, char* argv[])
    {
      s_parameters equa1;
      equa1.a[0]=0;
      equa1.b[0]=0;
      s_parameters * p_equa=malloc(sizeof(equa1));
      if(equa1==NULL)
      {
       fprintf(stderr,"Erreur\n");
       exit(EXIT_FAILURE);
       calcul(p_equa);
    }
    et sans le typedef

    Ceci me genere des erreurs a l'allocation memoire et les types de ma fonction calcul ne sont pas reconnu je ne comprend pas comment definir en parametre.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    salut, avec un typedef tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct
    {
      double a,b;
    } Toto;
     
    void fun(Toto * toto);
    sans typedef tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct Toto
    {
      double a,b;
    };
     
    void fun(struct Toto * toto);

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par fearyourself
    Wow, un malloc pour un exemple aussi simple

    Tu pouvais juste passer le pointeur vers une structure statique non ?

    Jc
    oui...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    merci.
    Malgré cette notation le compilateur me fait remarquer des erreurs.
    Mon programme se decompose de 5 fichiers.
    un main.c un func.c ou je defini la fonction et un var.c ou je defini les variables.
    De plus j'ai un var.h et un func.h ou je definie le prototype de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* func.h */
    extern void Calcul(parameters * equap);
    et j'ai des erreurs de syntaxes que je ne trouve pas sur cette ligne

    Dans mon main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #ifdef __cplusplus
    #error This source file is not C++ but rather C. Please use a C-compiler
    #endif
     
    #include<stdlib.h>
    #include<math.h>      																													
    #include "var.h"
    #include "func.h"
     
    typedef struct {
    			   float a[N];
    			   float b[N];
    }parameters;
     
     
    void main(int argc, char* argv[])
    {
      parameters equa1;
      equa1.a[0]=0;
      equa1b[0]=0;
      parameters * equap=malloc(sizeof(equa1)); /* ici erreur:'parameters' : illegal use of this type as an expression */
      if(equap==NULL)
      {
       fprintf(stderr,"Erreur\n");
       exit(EXIT_FAILURE);
      }

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le typedef de structure devrait être dans func.h...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Cela m'a enlevé des erreurs mais j'ai toujours un probleme dans mon main quand je defini le pointeur sur ma structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     parameters * equap=&equa1;
    'parameters' : illegal use of this type as an expression

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    l'erreur était que j'initialisait ma structure avant de definir le pointeur.
    du coup je defini ma struc apres mon pointeur et apres j'init ma structure

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Du coup une derniere question : étant donné que je defini ma structure dans mon var.h dois je l'inclure en premier dans mes autres fichiers ou l'ordre n'a peu d'importance (car dans mon func.h je defini ma fonction qui prend en parametre le pointeur sur ma struct)

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    Si ca ne te dérange pas de modifier ta valeur d'entrée. Dans ce cas equa1 du main sera modifié par la fonction calcul. Quand tu passes un pointeur en paramètre, tu passes l'adresses de la variable. Donc si tu modifies le contenu de l'adresse, tu modifies la variable. Dans notre cas, la fonction calcul(...) ne modifie que le champ y de la structure pointée en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void calcul(s_parameters *equa) {
      equa->y=equa->x+equa->b;
    }
     
    int main () {
      s_parameters equa1;
     
      equa1.y=0;
      equa1.b=7;
      equa1.x=4;
     
      calcul(&equa1);
      printf("equa1.y = %d\n", equa1.y); // equa1.y = 11
      return 0;
    }
    Si tu ne veux pas que la variable d'entrée soit modifiée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void calcul(s_parameters *equaSrc, s_parameters *equaDest) {
      equaDest->y=equaSrc->x+equaSrc->b;
    }
     
    int main () {
      s_parameters equa1,equa2;
     
      equa1.y=0;
      equa1.b=7;
      equa1.x=4;
     
      calcul(&equa1,&equa2);
      printf("equa1.y = %d\n", equa1.y); // equa1.y = 0
      printf("equa2.y = %d\n", equa2.y); // equa2.y = 11
      return 0;
    }

  20. #20
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    L'ordre est important. Puisque dans func.h, le prototype utilise la structure, celle-ci doit être connue à ce moment là. Donc avant d'inclure funv.h , on doit inclure var.h (ou func.h doit inclure var.h)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Passage de structure en parametre fonction : Pointeur
    Par apicard3 dans le forum Débuter
    Réponses: 5
    Dernier message: 30/10/2013, 08h29
  2. tableau de structure en parametre fonction
    Par Dark_Alex69 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/11/2007, 18h38
  3. Réponses: 7
    Dernier message: 08/04/2006, 12h18
  4. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 15h00
  5. Réponses: 12
    Dernier message: 25/01/2006, 07h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo