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 :

modifier une structure


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut modifier une structure
    bonjour,

    J'ai une structure déclarée comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct {
       unsigned char a;
       signed char b;
       unsigned int c;
       char myBuf[SIZE_BUF];
       signed int d;
    } YOOO;
    je voudrais pouvoir séparer en plusieurs la variable myBuf => et je veux que mon programme puisse continuer de compiler sans avoir à faire de modification dans mon programme

    J'ai donc pensé à modifier ma structure en union:
    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
     
     
    	typedef struct _myStruct {
    		char sm;							
    		char Buf1[20];
    		char Buf2[SIZE_BUF - 1 - 20];
    	} myStruct ;
     
    typedef union {
        struct{
          unsigned char a;
          signed char b;
          unsigned int c;
          char myBuf[SIZE_BUF];
          signed int d;
       };
     
       struct{
          unsigned char a;
          signed char b;
          unsigned int c;
          myStruct myBufEx;
          signed int d;
       };
    } YOOO;
    => normalement je dois pouvoir continuer à pouvoir utiliser ma structure comme avant a part que je peux en plus acceder aux éléments de .myBufEx qui sont stoqués au même emplacement mémoire que .myBuf[]

    Pouvez-vous me confirmer que j'ai le droit de faire ça et que je n'aurais pas de problèmes (a priori ça compile) ?

    Remarque, je code pour un petit microcontrolleur 8-bits

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Ton compilo doit avoir un pragma qui permet de "packer" les structures. Utilise le, sinon rien ne garantit qu'il ne va pas insérer du padding dans ta structure.

    A part ça il faut savoir que les structures non nommées, comme celles que tu utilise dans ton union, ne sont pas standards, même si de nombreux compilo les supportent.

    Ce sont juste des problèmes mineurs qui peuvent géner la portabilité, mais si ça marce avec ton compilo alors c'est parfait. Par contre tu passe d'un buffer de SIZE_BUF à deux buffer qui au total font SIZE_BUF - 1, ça c'est un peu louche.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok merci pour les infos

    Citation Envoyé par matafan Voir le message
    Ton compilo doit avoir un pragma qui permet de "packer" les structures. Utilise le, sinon rien ne garantit qu'il ne va pas insérer du padding dans ta structure.
    le compilateur que j'utilise est : MPLAB C Compiler for PIC18 MCUs
    => nul part dans la doc je ne trouve comment packer mes données. Cependant dans les codes d'exemples j'ai des structures déclarées comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct __attribute__((__packed__)) _myStruct {
    ...
    } myStruct;
    => je suppose donc que "__attribute__((__packed__))" permet de packer les données...


    Citation Envoyé par matafan Voir le message
    Par contre tu passe d'un buffer de SIZE_BUF à deux buffer qui au total font SIZE_BUF - 1, ça c'est un peu louche.
    => je ne crois pas m'etre trompé : tu as compté la variable sm (d'où le -1) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier une structure toutes les secondes
    Par jmathon dans le forum Débuter
    Réponses: 1
    Dernier message: 20/10/2008, 14h49
  2. Modifier une structure
    Par Hew dans le forum MATLAB
    Réponses: 14
    Dernier message: 22/02/2008, 16h57
  3. Modifier la structure d'une requete
    Par energies dans le forum Access
    Réponses: 1
    Dernier message: 30/03/2006, 12h47
  4. Vb.Net et Access : comment modifier la structure d'une base
    Par hucliez dans le forum Accès aux données
    Réponses: 3
    Dernier message: 09/11/2005, 13h33
  5. [SQL Access] Modifier la structure d'une table
    Par Le Lézard dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/06/2004, 14h03

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