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 :

[GCC]PowerPC: probleme de comparaison signée


Sujet :

C

  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut [GCC]PowerPC: probleme de comparaison signée
    Bonjour tout le monde !

    J'ai un GCC cross-compilé pour PowerPC entre les mains, et il me fait des manières .
    Explication:

    J'ai un petit bout de code qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int ma_val;
    char my_diff;
    ma_val = (my_diff < 0);
    Et ce petit compilateur me répond gentillement:
    Citation Envoyé par Petit gcc bien malin
    warning: comparison is always false due to limited range of data type
    Après une instant de réflexion, je décide de regarder le code généré, et je trouve:
    En gros, lbz met à 0 les bits 0 à 23. Je perd mon info de signe, c'est la cata !
    La solution simplissime consiste à transformer mon char en int, mais c'est hors de question.

    Un cast ne suffit pas (ma_val = ((int)my_diff < 0)) : j'obtiens strictement la même chose.

    Est-ce dû au compilateur ?
    Merci d'avance !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je pense que sur ton compilateur, char est non signé donc toujours >= 0 (je ne sais plus si c'est le comportement normal ou non et peu importe pour l'instant).

    A partir de là, ton évaluation (my_diff < 0) ne peut JAMAIS être fausse et c'est ton warning.

    Est ce que ma_val = (((int)my_diff) < 0) te fait le même problème ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par progfou Voir le message
    Bonjour tout le monde !

    J'ai un GCC cross-compilé pour PowerPC entre les mains, et il me fait des manières .
    Explication:

    J'ai un petit bout de code qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int ma_val;
    char my_diff;
    ma_val = (my_diff < 0);
    Et ce petit compilateur me répond gentillement:


    Après une instant de réflexion, je décide de regarder le code généré, et je trouve:
    En gros, lbz met à 0 les bits 0 à 23. Je perd mon info de signe, c'est la cata !
    La solution simplissime consiste à transformer mon char en int, mais c'est hors de question.

    Un cast ne suffit pas (ma_val = ((int)my_diff < 0)) : j'obtiens strictement la même chose.

    Est-ce dû au compilateur ?
    Merci d'avance !
    Les chars sont signes ou pas suivant l'implementation -- mais il y a quelques contraintes. Et IBM a tendance a utiliser des chars non signes (entre autres parce que les contraintes font que si on veut utiliser EBCDIC comme charset, c'est obligatoire).

    Est-ce qu'etre explite et remplacer char par signed char te conviendrait?

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Un signed répond parfaitement à ma question .

    Merci !

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

Discussions similaires

  1. probleme de comparaison de date
    Par witjet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/07/2006, 11h39
  2. Problème de comparaison de fichiers
    Par peppena dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 30/05/2006, 19h41
  3. [VBS]probleme ds comparaison de nombres
    Par zorba49 dans le forum VBScript
    Réponses: 9
    Dernier message: 24/05/2006, 16h43
  4. [Dates] Probleme de comparaison de date
    Par mathieu77186 dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2005, 17h21
  5. Probleme avec le signe & contenu dans un parametre d'une
    Par Ludo_xml dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 22/08/2005, 15h45

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