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 :

Erreur : void value not ignored as it ought to be


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut Erreur : void value not ignored as it ought to be
    C'est une des errreurs que je retrouve à la compilation des lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 280: (char *)(Bitmap.bmBits) [0]
    ligne 281:         = (char *)(Bitmap.bmBits) [0];
    Voilà le résultat précis de la compilation :
    C:\C\tmp\TraitementBitmap\main.c In function `WindowProcedure':
    280 C:\C\tmp\TraitementBitmap\main.c [Warning] dereferencing `void *' pointer
    281 C:\C\tmp\TraitementBitmap\main.c void value not ignored as it ought to be
    281 C:\C\tmp\TraitementBitmap\main.c [Warning] dereferencing `void *' pointer
    281 C:\C\tmp\TraitementBitmap\main.c void value not ignored as it ought to be
    C:\C\tmp\TraitementBitmap\Makefile.win [Build Error] [main.o] Error 1

    Note : le champ bmBits d'une stucture BITMAP est de type LPVOID (je suis sur que ça équivaut à void * mais je n'ai pas réussi à trouver "typedef LPVOID void *" dans les fichiers d'en-tête Windows)

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    poste un code compilable s'il te plaît.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <windows.h>
     
    int main (void) // Première fois de ma vie que je fais attention à des broutilles comme ça ;-)
    {
    	BITMAP Bitmap;
     
    	(char *)(Bitmap.bmBits) [0]
    	        = (char *)(Bitmap.bmBits) [0];
    }

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par _Michel Voir le message
    (je suis sur que ça équivaut à void * mais je n'ai pas réussi à trouver "typedef LPVOID void *" dans les fichiers d'en-tête Windows)
    windef.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void far *LPVOID;

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par _Michel Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <windows.h>
     
    int main (void) // Première fois de ma vie que je fais attention à des broutilles comme ça ;-)
    {
    	BITMAP Bitmap;
     
    	(char *)(Bitmap.bmBits) [0]
    	        = (char *)(Bitmap.bmBits) [0];
    }
    Dis moi ce que ce code est censé faire selon toi?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Décidement je suis ridicule, et je ferais bien de revoir les cours de C : leçon 0 - définir un type

    Ceci dit, moi je trouve cette définition (pas tout à fait la même : "typedef void *PVOID,*LPVOID;"
    ) dans winnt.h

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    CE code fait juste un accès poiteur, mais il est extrait du code d'une appli Windows (snif...) qui traite des bitmaps. Je le met pas en totalité parce que comme en tout il doit faire dans les 500 lignes ça encombrerait les serveurs Developpez un peu pour rien.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Il manquait des parenthèses:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
     = ((char *)(Bitmap.bmBits)) [0];
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
     = static_cast<char *>(Bitmap.bmBits) [0];
    Naturellement, ce la ne permettra pas de faire marcher le mini-bout de code posté, puisque la structure BITMAP n'y est pas initialisé.

    Mais c'était bien un code minimal qui montrait le problème, donc on peut supposer que le vrai code fait ce qu'il faut pour initialiser correctement la structure...
    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.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Par défaut
    Cela va de soit!

    Merci beaucoup.

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Il manquait des parenthèses:
    Merci Médinoc, j'y avais penser mais je croyais que les parenthèses était plus prioritaires que les crochets alors comment se fait il qu'il faille rajouter une paire de parenthèses?
    Cordialement.

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Les parenthèses sont peut-être plus prioritaires que les crochets, je n'en sais rien, mais le message d'erreur montre que les crochets sont prioritaires sur le transtypage.

    Edit: Vu une confirmation, bien qu'elle ne soit pas officielle:
    Citation Envoyé par http://www.cs.cf.ac.uk/Dave/C/node4.html

    ( ) [ ] -> .
    ! - * & sizeof cast ++ -
    (these are right->left)
    * / %
    + -
    < <= >= >
    == !=
    &
    |
    &&
    ||
    ?: (right->left)
    = += -= (right->left)
    , (comma)
    Aussi vu ici : http://en.wikipedia.org/wiki/Order_o...cal_precedence
    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.

  12. #12
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Merci Médinoc je me suis fais avoir bêtement en bloquant sur les parenthèses.
    (c'est dans le K&R p53 pour ceux que ça intéresse).
    Cordialement.

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Merci Médinoc, j'y avais penser mais je croyais que les parenthèses était plus prioritaires que les crochets alors comment se fait il qu'il faille rajouter une paire de parenthèses?
    Il faut TOUJOURS faire attention aux parenthèses lors de l'écriture d'expressions complexes, notamment basées sur des structures imbriquées données par pointeur et aboutissant à des tableaux...

    Les compilateurs ne sont pas forcément devins, et en particulier lors de "castage" dynamique...

    Une expression comme :

    risque de provoquer des comportements indéterminés si le cast et les parenthèses ne sont pas au bon endroit et en nombre suffisant...

  14. #14
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Sauf que la ça na rien à voir : quand j'ai regardé sur mon tableau de priorité des opérateurs, au lieu de regarder la ligne "(type)" j'ai regardé la ligne "()" autrement j'aurai de moi même encadré l'expression par des parenthèses. C'est une simple faute d'inatention de ma part.

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Keep cool..

    mon post ne s'adressait pas à toi en particulier, mais aux lecteurs du thread en général, je profitais juste de ta remarque pour en faire une plus générale...


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

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/02/2008, 15h05
  2. Réponses: 1
    Dernier message: 12/07/2006, 11h26
  3. Message d'erreur "https is not supported"
    Par nono08 dans le forum Web
    Réponses: 5
    Dernier message: 04/04/2006, 14h10
  4. Réponses: 2
    Dernier message: 25/12/2005, 20h03
  5. Erreur ORA-00979 : not a GROUP BY expression sur Oracle9i
    Par Dirty Henry dans le forum Oracle
    Réponses: 9
    Dernier message: 21/10/2005, 14h23

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