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 :

[Explication] ~bool warning C4804


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut [Explication] ~bool warning C4804
    Bonjour � tous,

    Je me pr�sente ici pour demander un petit renseignement sans doute anodin mais qui m'agace de ne pas savoir pourquoi
    Si je compile �a sous Visual Studio 2008 Express.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct myStruct
    {
        bool m_myBool;
    };
     
    int main()
    {
        m_myBool = ~m_myBool;
    }
    J'ai le droit a deux warnings
    warning C4804: '~' : unsafe use of type 'bool' in operation
    warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)

    Alors pourquoi? le bitwise n'est pas sur? Est ce une question de BigEndian et LittleEndian qui ferait que ce ne sera pas sur sur toute les machines?

    Ou bien d'autre raison pour me dire �a.

    Merci

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Je ne comprend pas bien l'int�r�t d'utiliser sur un bool�en l'op�rateur ~...
    Que veux-tu faire ? Une inversion du bool�en ?

  3. #3
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Oui, c'est le but.
    Je dis pas que c'est une volont� absolue de ma part, mais je demande juste pourquoi il me lance ce warning sur un bool

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Sans doute parce que l'op�rateur ~ doit s'appliquer � un nombre, et pas � un bool�en.

    Utilise l'op�rateur !.

  5. #5
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Merci, je sais que je peux utiliser le ! mais ~ est fait aussi pour �a.
    L'un et l'autre on leur raison d'�tre diff�rente et s'applique sur un bool�en.

    C'est un warning pas une erreur donc �a s'applique a un boolean, de plus un bool est cod� sur 32bits comme un int sauf certaines architecture sur 1 bits. Donc c'est applicable.
    Je demande une explication, pas une solution.

    merci quand m�me

  6. #6
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Astraya Voir le message
    Merci, je sais que je peux utiliser le ! mais ~ est fait aussi pour �a.
    L'un et l'autre on leur raison d'�tre diff�rente et s'applique sur un bool�en.

    C'est un warning pas une erreur donc �a s'applique a un boolean, de plus un bool est cod� sur 32bits comme un int sauf certaines architecture sur 1 bits. Donc c'est applicable.
    Je demande une explication, pas une solution.

    merci quand m�me
    Non, le ~ n'est pas fait pour �a. ~ est fait pour obtenir le compl�ment � 1 d'un scalaire, ce qui n'a pas de sens pour un bool�en, de la m�me mani�re que | et & n'ont pas de sens sur un bool�en (true & 0x100, �a donne quoi ?). Ainsi, ~false ne va pas n�cessairement donner true comme valeur et ~true ne va pas n�cessairement donner false.

    Si true = 0x00000001, alors ~true = 0xFFFFFFFE != false (0), et ~false = 0xFFFFFFFF != true (0x00000001).

    Bien s�r, le principe de mondre surprise pr�vaut dans le standard, et il est logique que ~true = false et ~false = true. Cependant, pour pouvoir effectuer correctement ces op�rations, et selon l'impl�mentation choisie par le vendeur de compilateur, des tests suppl�mentaires implicites sont peut-�tre n�cessaire (c'est certainement ce qui se passe avec Visual C++).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    // pseudo code pour x = ~y lorsque x et y sont de type bool
    x = ((~(int)y) ? true : false)
    Au niveau code machine, �a s'impl�mente n�cessairement en plusieurs instructions machines l� ou une seule est normalement n�cessaire - d'o� le performance warning.

    ! est utilis� pour effectuer une n�gation logique: !0 == true, et !n == false pour n != 0, et ce pour tous les types int�graux (avec promotion vers le type bool�en si n�cessaire).

    Pour plus de pr�cision :

    Citation Envoy� par n3242, 5.3.1
    9) The operand of the logical negation operator ! is contextually converted to bool (Clause 4); its value is true if the converted operand is false and false otherwise. The type of the result is bool.

    10) The operand of � shall have integral or unscoped enumeration type; the result is the one�s complement of its operand. Integral promotions are performed. The type of the result is the type of the promoted operand. There is an ambiguity in the unary-expression �X(), where X is a class-name or decltype-specifier. The ambiguity is resolved in favor of treating � as a unary complement rather than treating �X as referring to a destructor.
    Je tiens � rajouter que rien ne te dis que les bool soient cod�s sur 32 bits. sizeof(bool) n'est pas d�fini dans le standard C++.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 04/03/2014, 12h16
  2. warning C4800 :Conversion forc�e de char* en bool!
    Par bertry dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 31/12/2010, 11h20
  3. [RegEx] explication warning "REG_EPAREN"
    Par mzt.insat dans le forum Langage
    R�ponses: 1
    Dernier message: 22/02/2007, 17h17
  4. R�ponses: 8
    Dernier message: 01/03/2005, 22h41
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de donn�es
    R�ponses: 6
    Dernier message: 19/05/2002, 22h18

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