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 :

Caster sans warning


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 219
    Par défaut Caster sans warning
    Bonjour,

    Plusieurs fois dans mon programme, je veux récupérer la partie entière d'une variable double. Je fais donc (int) maVariable.

    A chaque fois, j'obtiens lors de la compilation: Warning, possible loss of data.
    Y a-t-il une solution pour lui expliquer que je souhaite bien perdre ces données? et qu'il arrête de me le dire à chaque fois.

    Merci
    Pierre

  2. #2
    Membre expérimenté Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Par défaut
    Cela dépend de ton compilateur : certains options activent les warnings, d'autres les désactivent.

    Bref il faudrait un peu plus d'infos sur le compilateur que tu utilises et les options de compilations que tu appliques

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 265
    Par défaut
    salut,

    pour faire ca sans warning, tu peux utiliser la fonction floor() de math.h
    Je pense que c'est un peu mieux que de désactiver les warning.

  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 : 50
    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
    Par défaut
    Sauf que floor retourne un double, et non un int...

    Peut-être que static_cast<int>(42.0); ne provoque pas de warning ?

    Sinon, il est possible de désactiver un warning qui n'est pas adapté à un programme. Avec VC++, par exemple, tu peut utiliser un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #pragma warning (push)
    #pragma warning (disable:lenumeroduwarning)
    int i = (int)42.0;
    #pragma warning (pop)
    Enfin, tu peut te faire ta fonction de conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int toInt(double d)
    {
      return d;
    }
    Avantage : Un seul point où un warning est émis, et un seul endroit où le désactiver par la méthode précédente.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {double unFlottant = 42.0; int x = (int)unFlottant; (void)x; }
    {double unFlottant = 42.0; int x = static_cast<int>(unFlottant); (void)x; }
    Pas le moindre Warning sous Visual Studio 2005 alors que je suis en Warning Level 4 + Warnings de portabilité 64 bits...

    Rien, ni avec un cast C ni avec un cast C++...
    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.

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Aucun warning non plus avec gcc ou g++, même en mode paranoïaque.

  7. #7
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 219
    Par défaut
    Merci de vos réponses

    J'utilise VC++ 2005. En fait j'ai réussi à les résoudre en voulant optimiser un peu mon code. J'utilisais des double alors que je pouvais souvent me contenter de int. Ca a suffit pour qu'il arrête de me signaler des warning.

    Merci encore

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

Discussions similaires

  1. Caster sans instanceof
    Par Chamimi dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2012, 15h42
  2. Réponses: 18
    Dernier message: 17/06/2011, 11h56
  3. WARNING sans solution
    Par jena dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/11/2008, 14h48
  4. Caster une String en byte sans getByte()
    Par goboben dans le forum Langage
    Réponses: 7
    Dernier message: 15/10/2008, 14h32
  5. Exécution sans WARNINGS
    Par nahlette dans le forum Prolog
    Réponses: 6
    Dernier message: 25/11/2007, 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