[C]warning très chiant

Onde2Choc Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
 Onde2Choc -
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   Statut Membre Dernière intervention   120
 
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
Guki
 
/* 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
Onde2Choc
 
Merci à tout les deux :p je croyais que NULL était défini comme valant (void *)0 dans stdio ou stdlib ?
0
Guki
 
En C oui mais tu compares un entier et un pointeur dans ton code d'où incompatibilité.
0
Onde2Choc
 
Ok merci
0