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 :

définition d'un type, utilisation des :


Sujet :

C

  1. #1
    Membre confirmé Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Par défaut définition d'un type, utilisation des :
    Salut tout le monde. Le sujet du topic n'est vraiment pas précis, mais je ne sais pas ce que je peux mettre d'autre. Voilà je suis actuellement en train de faire de la relecture de code, et je suis tombé là-dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct
    {
    	/* mot 0 */
    	CC_UINT
                                    :3,
                    variable_1   : 5,
    		variable_2	: 32;
    	/* mot 1 */
    	CC_UINT
    		variable_2	: 32;
    }ma_struct;
    Je n'ai aucune idée de ce que ça veut dire. D'après ce j'ai vu du reste du code ça doit plus ou moins me permettre de définir un type mais bon ...

    Je tiens à préciser que ça se déroule dans un contexte embarqué, ça a peut-être un rapport.

    ++

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    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 : 952
    Par défaut
    Salut,

    Es-tu sûr que ton exemple compile? Il s'agit plutôt d'une union que d'une strucutre, à mon avis.

    A+

    Pfeuh

  3. #3
    Membre confirmé Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Par défaut
    Oui oui, je suis sûr que ce code compile et tourne correctement.

    Alors je crois avoir trouvé qq chose. Apparemment, cette notation permettrait de définir directement le nombre de bits attribués à chaque variable, mais ça n'empêche que je trouve bizarre d'avoir plusieurs "variable_X" pour un mot, et des mots qui ont le même nom aussi :/.

  4. #4
    Expert confirmé
    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
    Par défaut
    Il s'agit effectivement de champs de bits.
    Par contre, la définition multiple de variable_2 pose un gros problème : il devrait y avoir une erreur à la compilation.

  5. #5
    Membre confirmé Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Par défaut
    En fait, le deuxième variable_2 est une erreur de ma part XD, vu que je ne savais ce que fais le code, je n'ai pas fais gaffe.

    Moi ce qui me gêne le plus, c'est le premier :3, il n'y a aucun nom de variable devant.

    Et du coup si je définis 2 CC_INT mais de nombre de bits différents, comment peut-on traiter les variables dans une même opération?

    ++
    Merci pour vos réponses.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Je crois que l'identificateur est facultatif dans un champs de bits, seul le type est nécessaire. Ça voudrait donc dire que CC_UINT, variable_1 et variable_2 sont des types.

  7. #7
    Membre confirmé Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Par défaut
    Ok, donc si je comprends bien, en fait je définis des "sous-types" de CC_INT, c ça? Ce sont des CC_INT mais de taille différentes. Et du coup je fais comment pour accéder aux 3 premiers bits.

    En plus je trouve ça bizarre de dire qu'il s'agit de type car comme le montre le code, mes "types" sont déclarés mot par mot. Ce sont tous des mots de 32 bits d'après ce que je peux voir dans mon code ( et malgré ce que montre mon exemple ).

  8. #8
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Si il n'a pas d'identificateur devant c'est qu'il n'est pas ulilisé, donc tu n'as pas besoin d'y accéder.

    variable_1 et variable_2 ne sont pas des type mais bien des identificateurs d'accés.

    (Je suppose qu'il n'y a pas de variable_2 dans le 1er mot)

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Citation Envoyé par Lucien63 Voir le message
    variable_1 et variable_2 ne sont pas des type mais bien des identificateurs d'accés.
    Et c'est quoi leurs types dans ce cas là ?

    D'après ce que je comprends de la norme, l'identifiant est optionnel. Pas le type.
    Soit j'ai pas compris la norme, soit c'est un compilateur exotique.

  10. #10
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    @sam1507 :
    Si tu as bien regardé le code c'est une virgule qu'il y a aprés chaques champs pas un point virgule.

  11. #11
    Expert confirmé
    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
    Par défaut
    CC_UINT est le type des variables variable_1 et variable_2

    Le premier champ de largeur 3 qui n'a pas d'identificateur ne fait que réserver ces trois bits (qui ne sont donc pas accessible) pour éviter que le compilateur ne place à cet endroit des données.

    Tout cela s'explique par le fait qu'on doit avoir un dispositif hardware précis et que les différents champs doivent correspondre exactement en largeur et position à des données hardware (registres, ports d'E/S, ...) .
    Sinon, ce genre de code n'est pas portable.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Citation Envoyé par Lucien63 Voir le message
    @sam1507 :
    Si tu as bien regardé le code c'est une virgule qu'il y a aprés chaques champs pas un point virgule.
    Au temps pour moi. J'avais pas vu que c'était des virgules.

  13. #13
    Membre confirmé Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Par défaut
    Ok, merci pour vos réponses, en fait c'était pas si dur XD.

    ++

  14. #14
    Membre confirmé Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Par défaut
    Salut, je me permet juste d'ajouter une petite précision après quelque tests si quelqu'un a le même pb.

    Les champs de bit doivent absolument être déclarés dans une structure. En effet, le code suivant ne fonctionne pas et on a une erreur du type: ISO C don't allow nested functions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(){
     
         int x : 5;
     
         x = 15;
         printf("x : [%d]\n",x);
     
    return 0;
     
    }

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

Discussions similaires

  1. utilisation des pointeurs de type "far"
    Par Flow_75 dans le forum C++
    Réponses: 0
    Dernier message: 25/03/2008, 07h35
  2. Réponses: 22
    Dernier message: 03/01/2008, 22h42
  3. [ksh et/ou bash] Utilisation des arguments type -d
    Par novices dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 24/11/2007, 14h04
  4. Réponses: 5
    Dernier message: 24/05/2006, 22h18
  5. [D2005] Utilisation des types énumérés
    Par bouha dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 21/07/2005, 22h21

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