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 :

Des entiers non signés


Sujet :

C

  1. #1
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut Des entiers non signés
    Boïnjouh,

    Je trouve que c'est relou de taper "unsigned int"...
    Est ce que c'est mal d'utiliser les types du genre "uint32_t"?
    Ya t il plus court parmis les types du C?
    Et je ne veux pas utiliser size_t pour autre chose que des tailles de zones memoire.

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Salut !
    Citation Envoyé par Gruik
    Est ce que c'est mal d'utiliser les types du genre "uint32_t"?
    A priori c'est la même chose puisque j'ai comme définition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef unsigned int uint32_t
    Ya t il plus court parmis les types du C?
    Y'a toujours la glib...
    http://developer.gnome.org/doc/API/2...sic-Types.html

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    "typedef unsigned int uint32_t"
    Bein oui, c'est ce qu'il ya dans <stdint.h> je crois, mais je sais pas si c'est standard ou quoi
    ..ou si je devrais faire mon propre typedef

  4. #4
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    Tu peux utiliser unsigned tout seul, c'est la meme chose que unsigned int.
    Si tu ne te plantes pas, comment veux tu pousser?

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Entre l'auto-complétion et tout le reste, franchement, je ne vois que peu ce que tu trouve lourd à écrire "unsigned int"...

    De plus, voyons les choses sous un autre angle:
    • Tu le dis toi meme, tu ignores si uint32_t est standard
    • ton EDI mettra les termes unsigned et int en évidence, mais fera-til pareil avec uint32_t
    • Tant qu'à faire, pourquoi ne pas systématiquement rajouter l'entete <GL/gl.h>(l'entete de base de OpenGl) pour pouvoir disposer de GLuint (c'est encore plus court à écrire que uint32_t... c'est pourquoi je pose la question )
    • es-tu sur que l'insertion de <stdint.h> et l'utilisation de uint32_t sera, au final, plus aisée que celle de unsigned int (hors les quelques secondes que tu gagneras peut etre à l'écriture)

    Je n'ai pas de réponse toute faite à chacune de ces remarques, et je n'ai pas *forcément* d'avis préconçu sur la question (meme si je le donne plus loin)... Je suis donc ouvert à toute discution sur le sujet...

    Mais, honnetement, j'ai l'impression que l'on atteind quelque part le sommum de la paresse (avec mon EDI, dés que j'ai écrit "unsi", j'ai l'auto-comptétion qui me propose "unsigned" comme seul choix) et qu'il *semble* domage de se passer de la "coloration synthaxique" qu'offrent les types clairement reconnus par l'EDI
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Le coup de la coloration syntaxique, c'est vrai
    Le coup des headers c'est pas un probleme dans mon cas puisqu'on inclut systematiquement un header tres general qui definit quelque macros et fait quelques inclusions
    Je disais que c'est lourd à ecrire, mais je voulais dire que ça prend surtout beaucoup de place en texte alors que "int" est beaucoup plus petit. On ne devrait ecrire que "uint"...
    Mais va pour "unsigned", j'ai juste peur que ça soit un peu choquant

    Merci

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Je suis, pour tout dire, tres mitigé sur l'arguement "de la place que ca prend dans le code"...

    Car ce problème peut tres facilement être résolu avec de bonnes habitudes/conventions de codages...

    En effet, dans quelles circonstances va tu avoir besoin de "unsigned int"
    • Dans la déclaration de variable
    • dans le cadre d'un cast
    • dans le cadre d'une allocation dynamique
    • dans la déclaration des arguments/valeur de retour d'une fonction...

    et pourtant:
    la *bonne habitude* consiste à déclarer une variable par ligne.

    C'est quand meme prendre un gros rique que de vouloir caster "brutalement" les choses... il est souvent préférable de les transtyper correctement.

    un brol = malloc(sizeof(unsigned int)*10); ca prend pas tellement de place que ca (si tu commence à la colone 72 du fait de l'indentation, il est peut etre temps de penser un peu à factoriser tout le reste )

    Sur une fonction dont le prototype serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int ma_fonction_au_nom_interminable(unsigned int a, unsigned int b, unsigned int c, unsigned int d, unsigned int e, unsigned int f)
    il y a trois manières d'arranger les choses:

    La premiere, c'est qu'il faut bien se souvenir que plus un nom est long et complexe, plus le risque est grand de faire une erreur en l'écrivant, avec ou sans complétion automatique (et surtout sans, d'ailleurs)... il serait peut etre opportun de penser à un nom un peu plus court

    La deuxième, c'est que trois à quatre arguments à passer semblent etre une limite à essayer de se fixer (au delà, non seulement l'appel a tendance à devenir illisible, mais, en plus, on court un risque beaucoup plus gros d'erreur en voulant passer les arguments)... Meme si dans l'exemple le risque est minimisé du fait que tous les arguments ont tous le meme type... mais les risques de fournir la mauvaise variable comme argument n°3 (passer mava, alors qu'il aurait fallu passer monentier... et que mavar était attendue en... 5eme position) devient, par contre bien plus important

    Peut etre est-il temps d'envisager de créer une structure qui contienne ces 6 entiers non signés (allant d'un simple tableau à une structure plus importante)

    La dernière possiblité, si les deux autres n'ont pas permis de réduire suffisemment l'espace pris par le prototype de la fonction, est qu'il est toujours possible d'aller à la ligne...

    Cette fonction pourrait très bien s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unsigned int ma_fonction_au_nom_interminable(unsigned int a, unsigned int b,
                                                 unsigned int c, unsigned int d,
                                                 unsigned int e, unsigned int f)
    /* ---- OU  ----OU  ---- OU  --- */
    unsigned int ma_fonction_au_nom_interminable(unsigned int a,
                                                 unsigned int b, 
                                                 unsigned int c, 
                                                 unsigned int d, 
                                                 unsigned int e, 
                                                 unsigned int f)
    /* ---- OU  ----OU  ---- OU  --- */
    (... il y en a tellement... )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    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
    stdint.h est une extension C99, comme cela est bien expliqué ici :

    http://nicolasj.developpez.com/articles/c99/#LV-A

    Jc

  9. #9
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Mon probleme de longueur de texte est effectivement dans le cas des paramètres de fonctions mais je connaissais le coup du sautage de ligne.
    Je crois que c'était aussi le fait que le type soit coupé en 2 (selection plus difficile), mais on a le meme probleme avec les structs.
    Je pense juste que ça devrait etre le plus simple possible vu comment l'utilisation d'entiers naturels est frequente.
    Sans ça, on utilise "int" en lieu et place d'"unsigned int" et le compilo se plaint lorsqu'on compare un signé avec un non signé ou qu'on passe un int * à la place d'un unsigned int *

  10. #10
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Citation Envoyé par fearyourself
    stdint.h est une extension C99, comme cela est bien expliqué ici :

    http://nicolasj.developpez.com/articles/c99/#LV-A

    Jc
    Okay thanks

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par fearyourself
    stdint.h est une extension C99, comme cela est bien expliqué ici :

    http://nicolasj.developpez.com/articles/c99/#LV-A

    Jc
    Merci pour l'info (personnellement, j'en savais trop rien )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par Gruik
    Mon probleme de longueur de texte est effectivement dans le cas des paramètres de fonctions mais je connaissais le coup du sautage de ligne.
    Je crois que c'était aussi le fait que le type soit coupé en 2 (selection plus difficile), mais on a le meme probleme avec les structs.
    Je pense juste que ça devrait etre le plus simple possible vu comment l'utilisation d'entiers naturels est frequente.
    Sans ça, on utilise "int" en lieu et place d'"unsigned int" et le compilo se plaint lorsqu'on compare un signé avec un non signé ou qu'on passe un int * à la place d'un unsigned int *
    En fait, la seule chose que tu ne puisse pas couper, ce sont les identifants (de type, de variable, de fonctions...) et les chaine de caractères...
    des choses comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsi
    gned int i; /* serait pour "unsigned int i;" */
    char *machaine="bla 
    bla"; /*serait pour "char *machaine="blabla;" */
    i=Maf
    onction(mac
    haine); /* serait pour "i=Mafonction(machaine);" */
    sont donc interdites

    Sinon, dés que tu as une accolade, une parenthese, une ponctuation ou un opérateur mathématique,une indirection (ptr-> ou structure.) tu peux aller sans problème à la ligne, avec l'indentation qui te plait...

    En fait, tu peux aller à la ligne et/ou mettre plusieurs espaces si cela te plait partout où tu peux décider de mettre un espace...
    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
     
        unsigned int tab[10
                         *
                          3];
        unsigned
            int
            nombre;
        tab[5+
            3]=10;
        nombre=
            4*
            3+
            2;
        printf
            (
            "%d",
               nombre);
    est donc tout à fait valide... bien que peu facilement lisible..., et correspond, tout simplement à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    unsigned int tab[10*3];/* ==unsigned int tab[30]:) */
    unsigned int nombre;
    tab[5+3]=10;
    nombre=4*3+2;
    printf("%d",nombre);
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  13. #13
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Oué je suis au courant, mais avoue qu'avoir 2 identificateurs au lieu d'un c'est chiant

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par Gruik
    Oué je suis au courant, mais avoue qu'avoir 2 identificateurs au lieu d'un c'est chiant
    Ca, ca fait strictement partie de ton opinion personnelle, donc, je suis disposé à écouter ton argumentation sur le sujet, mais, de prime abord, je ne vois pas forcément ce que ca peut avoir de chiant...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  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
    uint32_t n'est pas garanti être équivalent à unsigned int.
    Si un int a une taille différente de 32 (sur certaines architectures 64bits, par exemple)...
    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.

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

Discussions similaires

  1. Utilisation des types entier non signés dans Win32
    Par colorid dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2009, 10h04
  2. Conversion d'entiers non signés en caractères
    Par Fred677 dans le forum C++
    Réponses: 3
    Dernier message: 26/02/2008, 18h23
  3. Réponses: 9
    Dernier message: 12/10/2006, 00h36
  4. [Fortran 90] Type entier non signé
    Par nnath dans le forum Fortran
    Réponses: 2
    Dernier message: 17/07/2006, 00h21
  5. Déclarer un entier non-signé [PHP]
    Par Bouillou dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 16h46

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