Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1506 connectés 

  FORUM HardWare.fr
  Programmation
  C

  de char** à void**

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

de char** à void**

n°691910
leneuf22
Posté le 03-04-2004 à 21:44:21  profilanswer
 

Bonsoir tout le monde
 
Ya un truc qui me turlupinait depuis quelque temps, cf. le code suivant :
 

Code :
  1. void* test(void** ptr) {
  2. return *ptr;
  3. }
  4. int main(void) {
  5. char* ptr;
  6. ptr = test(&ptr);
  7. return 0;
  8. }


 
GCC (MinGW) me sort ceci :
warning: passing arg 1 of `test' from incompatible pointer type
 
Alors comment faire pour éviter ce warning sans faire ceci ?
(c'est pas équivalent mais c'est juste pour donner un exemple)
 

Code :
  1. int main(void) {
  2. char* ptr;
  3. void* gen_ptr = ptr;
  4. ptr = test(&gen_ptr);
  5. return 0;
  6. }


 
merci !


Message édité par leneuf22 le 03-04-2004 à 21:46:15
mood
Publicité
Posté le 03-04-2004 à 21:44:21  profilanswer
 

n°691930
Taz
bisounours-codeur
Posté le 03-04-2004 à 21:55:38  profilanswer
 

comme déjà expliqué, seules les conversions T* <-> void* sont implicites. or ici, il faut faire 2 converstions successives, le compilateur ne le fait pas. donc à toi de rajouter le cast comme il faut. et tu le fait très bien (c'est bien de vouloir comprendre et pas de caster directement)
 
gen_ptr = ptr ; // char* -> void* 1ère conversion
&gen_ptr; // void** -> void** ok
 
 
sinon, (void**) &s vas y doucement, en connaissance de cause


Message édité par Taz le 03-04-2004 à 21:56:13
n°691943
leneuf22
Posté le 03-04-2004 à 22:03:40  profilanswer
 

Ok merci bien
 
par contre le cast direct en (void**) me sort un autre warning (peut-être dû à mes options de compilation)
warning: dereferencing type-punned pointer will break strict-aliasing rules
 
De toute façon si les compilos aiment pas, mieux vaut expliciter en effet

n°691965
Taz
bisounours-codeur
Posté le 03-04-2004 à 22:18:15  profilanswer
 

-Wstrict-aliasing + -fstrict-aliasing provoque l'erreur, c'est normal. j'ai merdé, je suis pas capable de faire ce que je dis moi même
 
(void*) &s // 1ere converstion
 
l'autre conversion peut être faite implicitement
 
mais sinon, c'est
 
(void**)(void*) &s; :D


Message édité par Taz le 03-04-2004 à 22:19:56
n°691979
leneuf22
Posté le 03-04-2004 à 22:34:20  profilanswer
 

Oui exact (ça m'apprendra à avoir 3 tonnes d'arguments)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  de char** à void**

 

Sujets relatifs
Plus de sujets relatifs à : de char** à void**


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR