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 :

portabilité avec des struct


Sujet :

C

  1. #1
    Membre éclairé Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut portabilité avec des struct
    bonjour

    j'ai une petite question consernant la portabilité
    si on declare une stucture comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef struct {int a;float b;}*nh;
    alors pour reserver de la memoire pour un pointeur comment faire est ce qu'on doit faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nh a=malloc(sizeof(*nh));
    ou autrement ???
    merci

  2. #2
    Membre confirmé Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Moi je ferai un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct s_nh *nh;
    struct s_nh{int a;float b;};
     
    ...
     
    nh a = malloc( sizeof(s_nh) );
    EDIT : ajout du mot-clef struct

  3. #3
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut A propos de portabilité
    Hello,

    Citation Envoyé par elghadi_mohamed
    bonjour

    j'ai une petite question consernant la portabilité
    si on declare une stucture comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef struct {int a;float b;}*nh;
    alors pour reserver de la memoire pour un pointeur comment faire est ce qu'on doit faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nh a=malloc(sizeof(*nh));
    ou autrement ???
    merci
    Oui, et autrement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct {
       int a;
       float b;
    } nh;
     
    nh * pVar = malloc(sizeof(*pVar));
    pour ne pas "cacher" le type pointeur.

    [EDIT : je ne vois pas le rapport direct avec la portabilité, qu'est-ce qui t'a amené à parler de portabilité pour cette question sur l'allocation ? Les solutions fournies ici sont portables, malloc() fait partie de la bibliothèque standard C. ]


    A+

  4. #4
    Expert confirmé

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par _kal_
    Moi je ferai un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef s_nh *nh;
    struct s_nh{int a;float b;};
    sauf que cela ne fonctionne pas ... Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef struct s_nh *nh;
    struct s_nh{int a;float b;};
    Fonctionne.
    Jc

  5. #5
    Membre confirmé Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Citation Envoyé par fearyourself
    sauf que cela ne fonctionne pas ... Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef struct s_nh *nh;
    struct s_nh{int a;float b;};
    Fonctionne.
    Jc

    Oops, j'ai oublié le struct, a vouloir aller trop vite ...

  6. #6
    Membre éclairé Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut portabilité avec des struct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef  s_nh *nh;
    struct s_nh{int a;float b;};
    je crois que tu t'es trompe car tu devais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef struct s_nh *nh;
    struct s_nh{int a;float b;};

  7. #7
    Membre confirmé Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Oui tout a fait, j'ai oublié le struct au passage

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par elghadi_mohamed
    j'ai une petite question consernant la portabilité
    Il n'y a pas ici de problèmes de protabilité...
    si on declare une stucture comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef struct {int a;float b;}*nh;
    alors pour reserver de la memoire pour un pointeur comment faire est ce qu'on doit faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nh a=malloc(sizeof(*nh));
    Ce qui est sûr, c'est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nh a=malloc(sizeof *a);
    est correct.

    Je déconseille formellement de mettre '*' dans le typedef. Comme tu as pu le constater toi même, ça rend le code peu clair.

    Je conseille donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct 
    {
       int a;
       float b;
    } 
    nh;
    et cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nh *a = malloc (sizeof *a);

Discussions similaires

  1. Héritage de struct avec des templates
    Par yellowiscool dans le forum Langage
    Réponses: 3
    Dernier message: 13/12/2009, 18h34
  2. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  3. Réponses: 2
    Dernier message: 06/12/2002, 07h50
  4. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39
  5. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25

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