[C]warning très chiant

Fermé
Onde2Choc Messages postés 299 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 24 février 2006 - 26 sept. 2004 à 12:45
 Onde2Choc - 27 sept. 2004 à 18:42
Quand j'écris
if(fwrite(&nouveauMembre, sizeof(nouveauMembre), 1, fichier) == NULL)

j'ai le droit à un warning car "comparison between pointer and integer". Etrange car fwrite renvoie un int pour attester de la réussite ou non de la requête. Bon, alors je me dis que je n'ai qu'à caster de cette façon :
if((int)(fwrite(&nouveauMembre, sizeof(nouveauMembre), 1, fichier)) == NULL)

pour éliminer ce warning. Eh ben non, le warning reste. Alors je me dis qu'une question de hiérarchie cause peut être une évaluation de la condition avant le cast, auquel cas si j'écris
if(fwrite(((int)(&nouveauMembre, sizeof(nouveauMembre), 1, fichier))) == NULL)

alors le warning me lâche enfin. Eh ben non, le warning est d'humeur chieuse alors il reste incrusté dans la fenêtre de debug à sourire d'un air niais.

Comment faire pour me débarasser de cet emme*deur de warning ?

BOOM !
Laissez se propager l'onde de choc...

4 réponses

Ravachol Messages postés 566 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
26 sept. 2004 à 13:42
Bonjour quand même ;-)
Compare à 0 au lieu de NULL
Y a pas de quoi ;-)

A++

Quand la vérité n'est pas libre, la liberté n'est pas vrai
JACQUES PREVERT
0
/* en c */

#define NULL ((void *)0)

/* en c++ */

#define NULL 0

D'où en C le compilo verra un problème de comparaison de type mais pas en C++. Le mieux pour faire du C standard est de mettre 0 comme l'a suggéré Ravachol.
0
Merci à tout les deux :p je croyais que NULL était défini comme valant (void *)0 dans stdio ou stdlib ?
0
En C oui mais tu compares un entier et un pointeur dans ton code d'où incompatibilité.
0
Ok merci
0