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 :

Précision du type d'enum : standard ?


Sujet :

C++

  1. #1
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut Précision du type d'enum : standard ?
    Bonjour.

    J'ai beau chercher sur le net, je n'ai pas de réponse clair à la question suivante :

    est-ce que le typage d'enum est standart? (pour le dernier standart sorti j'entends)

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    enum MonEnum : unsigned char
    {
        MY_TRUC_A, MY_TRUC_B, // etc
    };
    Ca compile sous VC8, ya pas de précision dans la MSDN donc je pensais que c'était standart. Maintenant j'ai un sérieux doute parcequ'aucun de mes collegues ne le savait et c'est pas trop des manches.

    En effet le compilo avec lequel je bosse est Codewarrior (pour NDS) et lui ne le supporte pas. Je le soupçonnais de pas être totalement fiable vis a vis du standart mais sur ce point précis, apparamment d'après mes recherches sur le net ya presque aucune référence à cette feature du language.

    J'ai juste trouvé une référence à cette feature dans la page de wikipedia sur le prochain standart : http://en.wikipedia.org/wiki/C++0x#S...d_Enumerations

    Donc je cherche confirmation : est-ce que c'est une early implementation de microsoft dans son compilo ou est-ce que c'est déjà officiellement standart?

  2. #2
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Tout est dans le lien que tu cites : Ceci est apparemment un possible* ajout dans C++0x qui est le futur standard du C++, pour le moment encore à l'etat de draft.

    Donc pour le moment, ce code n'est pas du code C++ standard. Est ce que c'est un truc perso de Microsoft (vu que le compilo de Visual gere beaucoup de trucs propres a Windows), ou une tentative d'etre compatible avec les drafts C++0x deja sortis (une des options offertes par gcc), ca j'en sais rien.

    Ce qui est sur, c'est qu'en C++ standard (2003), les enums sont des int et c'est tout.

    *je dis possible car rien n'est definitif avant la publication officielle du standard

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Ca n'est pas standard.

    Plutôt qu'une early implementation du prochain standard, je dirais que c'est plus une extension du compilateur (pour se rapprocher des enum .NET ?).

    Si on a ce genre de choses dans le prochain standard, rien ne prouve donc que ce sera avec la même syntaxe.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Ksempac Voir le message
    En C++ standard (2003), les enums sont des int et c'est tout.
    Non.

    Citation Envoyé par Les saintes écritures, verset 7.2.5
    The underlying type of an enumeration is an integral type that can represent all the enumerator values defined in the enumeration. It is implementationdefined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int.

  5. #5
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Merci pour la precision

  6. #6
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Ok, merci ça m'ôte un doute.

    Du coup, juste pour vérifier les histoires de portabilitées, est-ce que cette syntaxe est gérée par gcc? Je ne l'ai jamais utilisé mais je comptais faire un portage une fois mon application perso (sous visual studio) finie et j'ai un peu utlisé cette syntaxe...
    A priori ce n'est pas indiqué dans la doc de gcc (ou alors je n'ai pas trouvé)

  7. #7
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Ok, merci ça m'ôte un doute.

    Du coup, juste pour vérifier les histoires de portabilitées, est-ce que cette syntaxe est gérée par gcc? Je ne l'ai jamais utilisé mais je comptais faire un portage une fois mon application perso (sous visual studio) finie et j'ai un peu utlisé cette syntaxe...
    A priori ce n'est pas indiqué dans la doc de gcc (ou alors je n'ai pas trouvé)
    Je n'ai aucune idée a propos de cette syntaxe en particulier (c'est d'ailleurs la premiere fois que j'en entends parler), mais de maniere generale, pour du code professionnel, tu devrais eviter d'utiliser ceci.
    1- Tu n'es pas sur que ce soit une early implementation. Si ca se trouve c'est juste le C++ a la sauce Microsoft, et ca ne suivra de toute facon aucun standard.
    2- Meme si c'est effectivement une syntaxe en vu du prochain standard, tu ne peux pas etre sur que cette feature sera gardé dans la version finale du nouveau standard
    3- Et supposons meme que ce soit adopté, la syntaxe peut varié ou des limitations peuvent etre apportées qui generont le fonctionnement de ton programme.
    Bref, en plus des problemes actuels (impossibilité de porter), cette syntaxe ne te garantit pas que tu n'auras pas de problemes plus tard y compris avec les nouveaux compilos.

    Si gcc propose de compiler avec certaines des innovations du C++ 0x, c'est surtout a des fins de test, juste pour que les gens aient un apercu de ce qu'il y aura, sans lire les discussions a rallonge du comité de standardisation.

    June 2, 2007
    Experimental support for the upcoming ISO C++0x standard been added. Enabled with -std=gnu++0x or -std=c++0x, this offers a first look at upcoming C++0x features and will be available in GCC 4.3
    GCC's C++0x mode tracks the C++0x working paper drafts produced by the ISO C++ committee, available on the ISO C++ committee's web site at http://www.open-std.org/jtc1/sc22/wg21/. Since this standard is still being extended and modified, the feature set provided by the experimental C++0x mode may vary greatly from one GCC version to another. No attempts will be made to preserve backward compatibility with C++0x features whose semantics have changed during the course of C++0x standardization.

  8. #8
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Ok, c'est aussi ce que je pense de manière théorique, mais dans la pratique si la feature est présente dans gcc (je n'en sais rien, d'où ma question) depuis un moment et agit de la même manière que VC8 , alors je peu considérer que mon appli restera portable pour les plateformes que je vise (d'abord Win, puis macos & linux).

    Dans le doute pour l'instant je vais enlever les typages mais bon.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Le typage d'Enum est une extension de Visual: C'est une des quelques extensions de .Net que Visual accepte également en code natif (il y en a d'autres, comme les spécificateurs "abstract" et "override" sur les fonctions membres virtuelles). Il me semble qu'il y a un paramètre de compilation qui permet de désactiver cela.

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En effet le compilo avec lequel je bosse est Codewarrior (pour NDS) et lui ne le supporte pas. Je le soupçonnais de pas être totalement fiable vis a vis du standart
    Il me semble pourtant qu'il est plutôt conforme au standard.

  11. #11
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Dans le doute je vais desactiver les extensions non standard voir, merci.
    Par contre je suis pas sur de trouver le paramettre, ce serait /clr ?


    loufoque> d'après mon experience, ça va, rien d'important coté standart (a part les limitations sur l'heritage et quelques autres bugs un peu hallucinant )

    edit> J'ai trouvé, c'est /Za (a priori)
    Je vais tester ça sur mon appli.

Discussions similaires

  1. [XPath] petite précision sur type de syntaxe
    Par Royd938 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 15/06/2006, 12h13
  2. [MS SQL] Est il possible de forcer la précision du type REAL
    Par TEXMEX dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/04/2006, 17h31
  3. Précision de types en perl
    Par Gnux dans le forum Langage
    Réponses: 7
    Dernier message: 08/11/2005, 08h31
  4. Précision du type float
    Par cj227854 dans le forum C
    Réponses: 5
    Dernier message: 02/11/2005, 20h54
  5. [MS-SQL][ADO] précision du type FLOAT
    Par Le Lézard dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/09/2004, 15h30

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