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 :

probleme déclaration constante #define


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut probleme déclaration constante #define
    Bonjour

    J'ai déclaré une constante comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define MA_CONSTANTE 0xFF
    Le problème est que j'ai le message d'alerte suivant :
    comparison is always false due to limited range of data type
    Pour le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    signed char maVariable; // variable 8 bits
     
    // ...
    // ...
     
    if(maVariable == MA_CONSTANTE){
     
    } else {
     
    }
    Comment faire pour ne pas avoir ce message (j'aimerais pour utiliser MA_CONSTANTE aussi avec des variables de type unsigned char) ?

    Merci d'avance,



    -------------------

    j'ai le même problème si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define MA_CONSTANTE '\xff'
    // ou 
    #define MA_CONSTANTE 0b11111111

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    un char est codé sur 1 octet, soit 8 bits.
    Le tien est en plus signé, donc 1 bit est celui de signe
    Le range de valeurs d'un signed char est donc -128:127
    0xFF vaut lui 255

    donc
    comparison is always false due to limited range of data type
    qu'il suffit de traduire mot-à-mot pour comprendre.
    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.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut
    J'avais bien compris le problème, mais il n'y a pas moyen de définir la constante en 'binaire' et que ça fonctionne avec un signed char et un unsigned char ?

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    type           | valeur min   | valeur max
    signed char    | -128         | 127
    unsigned char  | 0            | 255
    Ton test représente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si (un nombre dont la valeur est toujours comprise entre -128 et 127 inclus est égal à 255)
    ... donc tu as un warning.

    Quelle constante veux-tu définir ? quel test veux-tu réaliser ?
    En tous cas celui-ci est totalement inutile et illogique, puisque toujours faux.

    Tu peux représenter ce que tu souhaites et réaliser les opérations de ton choix, tant qu'elles sont logiques et réfléchies.
    D'ailleurs pourquoi parler d'unsigned char alors que tu as un signed char. Soit tu énonces mal ton problèmes, soit tu oublies la moitié de celui-ci.
    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.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Tu cherches une constante que tu pourras comparer à une variable de n'importe quel type ou tu souhaites savoir si une variable a atteint la valeur maximale qu'elle peut contenir ?

    Si c'est le cas 1, je pense que c'est mort (en tout cas avec quelque chose d'aussi simple) ; si c'est le cas 2, tourne toi vers les constantes définissant les limites de chaque type.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut
    Ben en fait c'est pour traiter des chaines de caractères

    Dans un projet j'avais l'habitude de toujours utiliser des "unsigned char" pour traiter mes chaines (peut être à tord ?) et donc mes #define fonctionnaient bien.

    Or depuis que j'ai mis à jours mon compilo, il me met des warning comme quoi les chaine de caractères doivent être des nombre signés (pourquoi ? ... ça je sais pas ... je ne vois pas pourquoi un caractère devrait avoir une notion de signé)

    Ce que je voulais faire, c'est changer tous les unsigned char de chaine en signed char en modifiant au minimum le programme pour limiter le risque de bug.

    Pour le moment, la seule solution que j'ai trouvé, c'est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define MA_CARACTERE ((signed char)0xFF) // valeur d'un caractère spécial
    // => ecrire -1 est tout sauf intuitif pour savoir à quel caractère ça correspond
    // Est-ce que c'est valide au moins ?

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

Discussions similaires

  1. [VBA] Probleme déclaration de variable
    Par Léponge85 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/06/2008, 14h57
  2. Où définir les constantes #define
    Par bubulemaster dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/03/2008, 12h13
  3. Probleme déclaration fonction...
    Par bixi dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2006, 19h52
  4. Réponses: 4
    Dernier message: 14/12/2005, 17h25
  5. [Delphi 2005 Perso] Probleme déclaration de méthode
    Par alk dans le forum Delphi .NET
    Réponses: 5
    Dernier message: 08/11/2005, 16h19

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