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

Langage C++ Discussion :

utilisation des constantes en c++


Sujet :

Langage C++

  1. #1
    Membre du Club
    Inscrit en
    Août 2003
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 128
    Points : 52
    Points
    52
    Par défaut utilisation des constantes en c++
    Bonjour,
    Est ce que vous pouvez m'expliquer pourquoi en C++ ou même en C, on peut déclarer une constante comme cet exemple : sachant que C++ ou C est un langage typé et dans l'exemple ci-dessus, je n'ai pas donné le type de la variable b.
    merci

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    En théorie cette instruction ne devrait pas compiler.

    Sauf si on t'a fait une blague en redéfinissant const ou b.
    Ou alors un compilateur fou à lier.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 29
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    C'est peut-être que ton compilateur respecte la norme C++ et non pas la norme C++ Standard (de 1998), donc est obsolète => dans ce cas une variable non typée prend par défaut le type int.

    Tu peux vérifier la correspondance en faisant un sizeof(b) et un sizeof (int), je pense que les résultats seront similaires.

  4. #4
    Membre du Club
    Inscrit en
    Août 2003
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 128
    Points : 52
    Points
    52
    Par défaut
    pour cob59 tu peux essayer et voir si c'est une blague ou non.

    c'est vrai que sizeof(b) ou sizeof(int) les 2 retournent 4; par contre si b par exemple est égale à 17.3 normalement quand j'afficherais b le prog affichera 17 ; mais le résultat est autre qe la valeur 17.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 29
    Points : 63
    Points
    63
    Par défaut
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream>
    #include <typeinfo>
     
    int main()
    {	
    	const b = 5;
     
     
    	std::cout << typeid(b).name() << std::endl;
    	// affiche i pour int, c pour char ...
     
    }
    mais le résultat est autre qe la valeur 17.
    Et ça donne quoi ?

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

    Informations professionnelles :
    Activité : aucun

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

    Pourrais tu déjà nous indiquer quel compilateur tu utilise, ainsi que la version,
    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

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    es-tu sur de compiler en C++ ?
    Cette ligne devrait générer une erreur du type "error C4430: missing type specifier - int assumed. Note: C++ does not support default-int" (sous VS), ou "ISO C++ forbids declaration of `b' with no type|" (sous C::B en C++), alors que seul un warning "warning: type defaults to `int' in declaration of `b'|" sous C::B en C.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre éprouvé
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 417
    Points : 1 247
    Points
    1 247
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Bonsoir,

    es-tu sur de compiler en C++ ?
    Cette ligne devrait générer une erreur du type "error C4430: missing type specifier - int assumed. Note: C++ does not support default-int" (sous VS), ou "ISO C++ forbids declaration of `b' with no type|" (sous C::B en C++), alors que seul un warning "warning: type defaults to `int' in declaration of `b'|" sous C::B en C.
    Salut Bousk,

    Tu as raison, dire que ça fait pas parti des standards du C++ de typer automatiquement en int. Ceci, dit si j'en suis ce qui est dit sur cette page MSDN, jusqu'à VS2005 le compilo typait automatiquement en int si rien n'était précisé.

    De plus, si j'ajoute un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma warning(disable : 4430)
    Je compile sans pb.

    Pour ce qui est du type par défaut "int" dont parle Pop360, si mes souvenirs sont bons, il ne s'agit que d'abréviations du style :
    signed == signed int
    unsigned == unsigned int
    short == short int
    etc...

    A+

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    C'est plus qu'une très mauvaise idée de supprimer des messages d'erreur. le #pragma warning(disable) ne devrait être utilisé que pour supprimer des messages de warning, et que lorsqu'on sait ce qu'on fait avec et ce qu'ils représentent.

    Et si VS 2005 ne respectait pas la norme à ce sujet, il ne faut pas le citer en exemple.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre éprouvé
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 417
    Points : 1 247
    Points
    1 247
    Par défaut
    Citation Envoyé par Bousk Voir le message
    C'est plus qu'une très mauvaise idée de supprimer des messages d'erreur. le #pragma warning(disable) ne devrait être utilisé que pour supprimer des messages de warning, et que lorsqu'on sait ce qu'on fait avec et ce qu'ils représentent.
    A ça je suis bien d'accord avec toi !
    Je ne fais que transcrire ce que j'ai trouvé sur le sujet...

    Citation Envoyé par Bousk Voir le message
    Et si VS 2005 ne respectait pas la norme à ce sujet, il ne faut pas le citer en exemple.
    Loin de moi l'idée d'en faire un exemple ! Mais pusiqu'il était question de trouver un compilo C++ qui type en int automatiquement en voila un

  11. #11
    Membre éprouvé
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 417
    Points : 1 247
    Points
    1 247
    Par défaut
    Citation Envoyé par Bousk Voir le message
    le #pragma warning(disable) ne devrait être utilisé que pour supprimer des messages de warning
    A noter que cette fois le "pragma warning" disable une erreur et non un warning. C'est la première fois que je vois ça et vous ?

  12. #12
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par djuju Voir le message
    A noter que cette fois le "pragma warning" disable une erreur et non un warning. C'est la première fois que je vois ça et vous ?
    Je viens de tester par curiosité, le "#pragma warning(disable : 4430)" permet de compiler "const b = 5;" sur VS2012. Bizarre le fait de "supprimer" des erreurs comme ça.

    Toujours est il que même si ce genre de code compile, il est évidemment à proscrire.

  13. #13
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Bizarre le fait de "supprimer" des erreurs comme ça.
    C'est très utile sur des projets "qui datent" et sur lesquels les développeurs ont écrit le code comme le compilateur le tolérait à l'époque (époque à laquelle il n'y avait d'ailleurs pas forcément de norme).

    Si à partir de la version n du compilateur tu dis "tout ça ce sera des erreurs et pi c'est tout", il va aussi falloir expliquer au chef de projet que, pour utiliser ce compilateur il va falloir passer x jours/semaines/mois à faire de la réécriture pour un gain nul en fonctionnalités (je ne dis pas que le projet ne gagnera rien - ça sera probablement meilleur en terme de lisibilité du code, de maintenance, ... enfin tout ce que le client ne voit pas - ), il va te répondre plus ou moins gentiment que ton nouveau compilateur tu peux toujours te gratter pour l'avoir.

    Donc :
    - le développeur perd des fonctionnalités
    - l'éditeur du compilateur qui interdit formellement ce genre d'erreurs vend moins de son produit
    => tout le monde est perdant
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

Discussions similaires

  1. Utilisation de constantes dans des requetes SQL sous access
    Par wiyouk dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/08/2010, 06h58
  2. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  3. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  4. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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