-pedantic et affectation entre pointeur de fonction et "void *" [C] - C - Programmation
Marsh Posté le 31-03-2005 à 12:53:45
T'as le cul entre 2 chaises. Et encore, ça serait pire en C++ (le cul entre 3 chaises ?).
Regarde la partie "Rationale" là:
http://www.opengroup.org/onlinepub [...] dlsym.html
Marsh Posté le 31-03-2005 à 13:06:23
merde
c'est d'autant plus génant que dans mon vrai code j'en ai un bon paquets des comme ça ²
bah, euh, merci quand même
Marsh Posté le 31-03-2005 à 13:35:04
Deadog a écrit : j'ai un ptit problème avec le "-pedantic"
|
Le but de la bonne programmation n'est pas de 'faire disparaitre les warnings', mais plutôt de comprendre leur sens et d'agir en conséquence.
Quel est le type retourné par dlsym () ? Après recherche, (fonction non standard), il semble que cette fonction retourne void *, ce qui n'est évidemment pas le bon type pour l'adresse d'une fonction. C'est pour ça que le compîlateur rale.
En l'occurence, void * définit un type de pointeur générique sur un objet, mais qui n'est pas compatible (de façon portable) avec un pointeur de fonction.
http://mapage.noos.fr/emdel/notes.htm#pointeurs
Tu peux masquer le défaut de conception de dlsym() avec un horrible cast du type de la fonction, mais ça ne résout rien. Il n'y a malheureusement pas d'alternative, car le défaut vient de dlsym() et pas de ton code.
Je peux déjà affirmer que dlsym() ne peut fonctionner tel quel, que sur des architectures dont la taille des pointeurs sur objet et sur fonctions sont identiques (ce n'est pas le cas du X86 en mode réel avec modèle de mémoire medium ou compact) et où les registres pointeurs données et fonctions sont banalisés.
Marsh Posté le 31-03-2005 à 14:36:49
et bien, même en faisant :
Code :
|
y'a tjrs un warning (différent mais similaire)
pour la portabilité, hum, bah j'ai pas de solution alternative
Marsh Posté le 31-03-2005 à 14:51:08
Deadog a écrit : et bien, même en faisant :
|
C'est normal et c'est plutôt c'est plutôt sain. Il n'y a pas de solution portable. Le Rationale est assez clair sur le sujet (fonction mal conçue...)
Marsh Posté le 31-03-2005 à 12:47:25
Salut
j'ai un ptit problème avec le "-pedantic"
j'essaye de n'avoir aucun warning à la compilation (histoire de faire propre ) mais la y'en a un qui me résiste
le code déjà :
il s'agit d'édition de liens dynamique, tout ce qu'il y a de plus banal en somme
la compilation et son warning :
gcc -Wall -pedantic -std=c99 test.c -o test -ldl
test.c: In function `main':
test.c:30: attention : ISO C interdit affectation entre pointeur de fonction et « void * »
c'est donc le "coucou = dlsym(handle,"coucou" );" qui pose problème, et j'arrive pas à trouvé le castage ou l'astuce pour faire disparaître proprement ce warning
vous auriez une idée ?
Message édité par Deadog le 31-03-2005 à 12:48:24