|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre éclairé
![]() Inscription : août 2004 Messages : 881 ![]() |
Bonjour,
Je dois porter mes application d'une machine linux 32 bits vers une machine 64 bits : Code :
Code :
Si je change "int caller" par "long int caller", ce warning disparait, mais engendre de nouveaux warnings sur la variable caller qui n'est plus du même type ... en cascade cela a de nombreuses répercussions. Le contenu de mes variables n'a pas changé, je sais donc que tout tient dans des int : un int fait 4 octets en 32 bits ou 64 bits, le pb vient du type long int qui est passé de 4 à 8 octets en 64 bits ( ce qui a du aussi modifier la taille du type XtPointer). Comment puis je supprimer mon Warning initial de manière élégante, sans changer le type de la variable concernée ? Merci |
||||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Ingénieur développement matériel électronique Inscription : juillet 2010 Messages : 140 ![]() |
Salut,
Par définition (norme C je ne sais plus la quelle) la taille d'un int est "au moins 16 bits" Ton programme n'a pas était écrit dans un esprit de portabilité. Je ne dis pas qu'il n'est pas portable, mais qu'on sont portage va entrainer des effet de bords qu'il va falloir gérer. Si le compilo te génère un warning c'est qu'il y a une raison. Sinon essai de déclarer "caller" comme un void* |
|
|
00
|
|
|
#3 | ||||||
|
Membre éclairé
![]() Inscription : août 2004 Messages : 881 ![]() |
Je confirme que le code n'a pas été écrit pour être portable, mais bon, aujourd'hui il faut l'utiliser sur une machine 64 bits.
J'ai fait le test suivant : Code :
Par ailleurs, dans le cas suivant : Code :
Code :
J'en conclue qu'on peut caster un int en long int ou un long int en int, mais si ce sont d'autres types, là ça ne passe plus. Merci |
||||||
|
|
00
|
|
|
#4 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 434 ![]() |
Le problème n'est pas sur des cast int<-> long int, mais sur des cast pointeurs<-> entiers dont le comportement est dépendant de l'implémentation, donc complètement non portable et sont à éviter.
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
10
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : août 2004 Messages : 881 ![]() |
Tu as sans doute raison dans l'absolu, cependant lorsque tu développes en X11/Motif tu n'as pas le choix : les interfaces des callbacks imposent leurs type XtPointer pour passer les paramètres.
|
|
|
00
|
|
|
#6 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 434 ![]() |
Ce n'est pas surprenant.
Ce qui est surprenant, c'est qu'on passe un entier (caller) là où est attendu un pointeur.
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : août 2004 Messages : 881 ![]() |
oui, c'est légitime de se poser la question. Je me réfère à la documentation officielle de X11/Motif ou les exemples utilisent le passage de paramètres comme je le fais.
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() |
La réponse courte, c'est que tu dois déclarer caller de type intptr_t au lieu de int.
Il doit en être de même pour tous les entiers voués à contenir des adresses.
__________________
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. |
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : août 2004 Messages : 881 ![]() |
Merci de votre aide
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com