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 :

redédinir un typedef simplement


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 15
    Points
    15
    Par défaut redédinir un typedef simplement
    Bonjour,

    J'ai le problème suivant: j'ai un type "mon_input" définit comme suit:

    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 {
      int input_1;
      double input_2;
    } st1;
     
    typedef st1 Type_1;
     
    typedef struct {
      int input_3;
      double input_4;
    } st2;
     
    typedef st2 Type_2;
     
    typedef struct {
      Type_1 ma_struct_1;
      Type_2 ma_struct_2;
    } mon_input;
    Ce type est utilisé pour récupérer les arguments dans une fonction de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ma_fonction (mon_input *IN_001)
      {
      ...
      }
    Maintenant, mon problème est l'appel par un autre programme à cette fonction.
    Il faut que je redéfinisse le typedef "mon_input" simplement, et je ne peux pas utiliser directement "mon_input" car les noms des typedef utilisés dans ce cas sont déjà employés par ailleurs dans le programme appelant (et bien entendu ils correspondent à autre chose).

    Y a-t-il une solution simple ?

    Appel du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_fonction (&ma_struc_entree);
    où je dois redéfinir le type de "ma_struc_entree"...

    Dans le programme appelant, j'ai fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
      int input_1;
      double input_2;
      int input_3;
      double input_4;
    } toto;
     
    typedef toto ma_struc_entree;
     
    extern void ma_fonction (ma_struc_entree *IN_XXX);
    Or, je constate que les types "ma_struct_entree" et "mon_input" ne correspondent pas !!! Du coup, avez vous un moyen simple de ré-écrire le typedef de la fonction appelée (mon exemple est simple, mais si on prend le même avec des centaines de structures imbriquée !!!)...

    Merci.

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Bonsoir,

    Je suis pas sur de tout comprendre :/

    Tu veux donc avoir 2 programmes (donc 2 .exe) qui éffectue des opérations avec tes structures ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    En fait je suis dans la situation où j'ai un code d'une fonction "F1" (.c et .h) et un code d'une autre fonction "F2" (.c et .h) à intégrer dans une fonction appellante.

    Or, les arguments pris par F1 et F2 se "marchent" dessus car dans F1.h j'ai des typedef qui s'appellent pareils que dans F2.h et qui ne sont pas identiques.

    Je me dis donc, que je ne vais pas utiliser les typedef de F1.h et F2.h (car l'inclusion de ces fichiers dans ma fonction appelante ne compile pas), mais que je vais plutôt redéfinir des types équivalents dans la fonction appelante... Mais je voudrais faire ça de manière "automatique" ou "simple"...

    Sachant, que le code de F1.h et de F2.h est issu de générateur de code automatique, je ne veux pas trop intervenir dedans et je ne vois pas comment employer ces includes générés ensembles (vus qu'ils se marchent dessus). A moins qu'il n'existe une solution...

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    il me semble qu'il est impossible de définir 2 type de même nom et "contiennent" différentes données.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Tout à fait, c'est pour cela que je souhaite redéfinir ces typedef dans le programme appelant, pour justement y mettre des noms différents.

    Mais par contre, comme j'ai des structures qui contiennent des structures à n'en plus finir, c'est pas simple de faire ça à la main.

    Quand je regarde un debugger je vois ma structure qui contient plein de sous-srtuctures, etc, etc... et je me demandais si par magie on pouvait pas "automatiser" une pseudo définition de typedef.

    Sinon, la solution c'est peut être par une astuce de faire appel aux typedef qui ont été générés, sans qu'ils se chevauchent, mais là je sèche...

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 869
    Points : 219 093
    Points
    219 093
    Billets dans le blog
    121
    Par défaut
    Risqué , et comme je ne suis pas trop sur du problème , si tu veux vraiment pas fouiller tout le code et que tu veux deux noms différents : tu fais un Rechercher remplacer ( ou Ctrl+H souvent ).
    Tu met le nom de la structure que tu veux modifier et du met le nouveau nom.
    Verifie une ou deux fois les chaines trouvés et après tu dit de tout remplacer.
    Fais attention à ne pas remplacer les deux structures par encore le même nom.

    Et avant de faire ça pour plus de précaution SAUVEGARDE ton projet
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 947
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,
    Citation Envoyé par peter3000 Voir le message
    Sachant, que le code de F1.h et de F2.h est issu de générateur de code automatique, je ne veux pas trop intervenir dedans et je ne vois pas comment employer ces includes générés ensembles (vus qu'ils se marchent dessus). A moins qu'il n'existe une solution...
    A part un #define pour renommer le typedef de F1 ou de F2, je ne vois pas trop comment contourner le problème.

    A+

    Pfeuh

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par peter3000 Voir le message

    Or, je constate que les types "ma_struct_entree" et "mon_input" ne correspondent pas !!! Du coup, avez vous un moyen simple de ré-écrire le typedef de la fonction appelée (mon exemple est simple, mais si on prend le même avec des centaines de structures imbriquée !!!)...

    Merci.

    et si tu faisais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
      struct p1 {
      int input_1;
      double input_2;
      } ;
     struct p2 {
      int input_3;
      double input_4;
     } ;
    } toto;
    ou bien :

    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
     
    typedef struct {
      int input_1;
      double input_2;
    } totop1;
     
    typedef totop1 TOTOType_1;
     
    typedef struct {
      int input_3;
      double input_4;
    } totop2;
     
    typedef totop2 TOTOType_2;
     
    typedef struct {
      TOTOType_1 ma_struct_1;
      TOTOType_2 ma_struct_2;
    } toto ;
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

Discussions similaires

  1. incrementer simplement une valeur ?
    Par jerz dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/03/2004, 14h28
  2. Réponses: 3
    Dernier message: 20/12/2003, 19h53
  3. Réponses: 11
    Dernier message: 15/10/2003, 17h26
  4. Réponses: 6
    Dernier message: 26/01/2003, 13h45
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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