explications sur un warning gcc

explications sur un warning gcc - C - Programmation

Marsh Posté le 19-11-2003 à 10:50:58    

Citation :


warning: dereferencing type-punned pointer will break strict-aliasing rules


 
J'ai ce warning depuis que je compile mon projet sous cygwin.
C'est surtout quand je recompile les sources de mes bases (php, apache, imagemagick etc.).
A votre avis ça signifie quoi exactement?

Reply

Marsh Posté le 19-11-2003 à 10:50:58   

Reply

Marsh Posté le 19-11-2003 à 10:58:48    

Bon apparement j'ai du écopper, sous cygwin, d'une version de gcc plus respectueuse de C99 que celle présente sur le serveur linux.
Je ne savais pas que les compilos pouvaient râler pour ça aujourd'hui.
Par contre j'ai toujours pas trouvé de traduction pour "type-punned"

Reply

Marsh Posté le 19-11-2003 à 11:07:07    

Reply

Marsh Posté le 19-11-2003 à 11:17:32    

merci taz pour le lien, j'avoue avoir moins de mal en français...
j'ai été voir l'exemple sur:
http://groups.google.fr/groups?sel [...] ethora.net
et maintenant j'ai peur [:totoz]
 
donc, est-ce que je dois en conclure que ImageMagick a été programmé n'imp'?


Message édité par Moktar1er le 19-11-2003 à 11:17:45
Reply

Marsh Posté le 19-11-2003 à 11:18:56    

j'en ai bien peur

Reply

Marsh Posté le 20-11-2003 à 11:49:33    

bon... bah c'est pire que ce que je croyais...

Code :
  1. pthread_t monThread;
  2. int retour;
  3. ...
  4. pthread_join( monThread, (void **)&retour );


ça passe si je compile en -O1 voire sans opti.
sinon je mets -O2 ou -O3 il me ressort le fameux warning...

Reply

Marsh Posté le 20-11-2003 à 11:53:56    

putain mais les mecs, c'est quoi ce bordel !
 
en C les convertiosn truc*<->void* son implicites, qu'estce que vous avec besoin de caster dans tous les sens là ou l'opération est parfaitement définie ?

Reply

Marsh Posté le 20-11-2003 à 11:59:54    

euh... là le cast c'est pour faire plaisir au compilo...
en plus tu retrouves la même notation dans la plupart des tutoriaux sur les threads posix...

Reply

Marsh Posté le 20-11-2003 à 12:01:30    

là le cast c'est pour faire plaisir au compilo..
 
 
justement non !!!!!!!!!!!!!!!!
 
 
pthread_join( monThread, (void*)&retour );
 
est correcte au niveau des types .|
 
 
 

Reply

Marsh Posté le 20-11-2003 à 12:07:32    

Bah ouais...
J'y aurais pas pensé ... [:spamafote]
Je me suis laissé enduire avec de l'erreur par le proto de pthread_join... et aussi par la plupart des tutoriaux (d'ailleurs, celui que tu proposes dans les bibliolinks sur les threads POSIX contient la même gaffe...).


Message édité par Moktar1er le 20-11-2003 à 12:09:01
Reply

Marsh Posté le 20-11-2003 à 12:07:32   

Reply

Marsh Posté le 20-11-2003 à 12:09:52    

et alors ?
 
void** <-> int* ça te parait compatible ? non
int* <-> void* ? oui, en vertu de la regèle que j'ai énoncée
void* <-> void** ? oui, en vertu de la meme règle
 
donc int* -> void* -> void**
 
seulement le compilateur peut pas faire 2 conversions à la suite, donc on fait la première pour lui
 
 
je peux pas réécrire tout le net désolé


Message édité par Taz le 20-11-2003 à 12:10:06
Reply

Marsh Posté le 20-11-2003 à 12:13:12    

Taz a écrit :

et alors ?
 
void** <-> int* ça te parait compatible ? non
int* <-> void* ? oui, en vertu de la regèle que j'ai énoncée
void* <-> void** ? oui, en vertu de la meme règle
 
donc int* -> void* -> void**
 
seulement le compilateur peut pas faire 2 conversions à la suite, donc on fait la première pour lui
 
 
je peux pas réécrire tout le net désolé


 
je ne t'incriminais pas  ;)  
merci du "coup de pied", sincèrement ça ne m'avait pas sauté à l'esprit de donner le petit coup de pouce qui va bien au compilo.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed