J'ai lu que la conversion d'un pointeur de fonction en un pointeur de données et vice versa fonctionne sur la plupart des plates-formes mais n'est pas garantie de fonctionner. pourquoi est-ce le cas? Les deux ne devraient-ils pas être simplement des adresses dans la mémoire principale et donc être compatibles?
void
. La conversion d'un pointeur de fonction en void *
ne doit pas modifier la représentation. Une void *
valeur résultant d'une telle conversion peut être reconvertie dans le type de pointeur de fonction d'origine, à l'aide d'un cast explicite, sans perte d'informations. Remarque : la norme ISO C ne l'exige pas, mais elle est requise pour la conformité POSIX.
dlsym()
- notez la fin de la section «Utilisation de l'application» où il est dit: Notez que la conversion d'un void *
pointeur en un pointeur de fonction comme dans: fptr = (int (*)(int))dlsym(handle, "my_function");
n'est pas définie par la norme ISO C. Cette norme requiert que cette conversion fonctionne correctement sur les implémentations conformes.