Czytałem, że konwersja wskaźnika funkcji na wskaźnik danych i odwrotnie działa na większości platform, ale nie gwarantuje, że zadziała. Dlaczego tak się dzieje? Czy oba nie powinny być po prostu adresami do pamięci głównej, a zatem powinny być kompatybilne?
void
. Konwersja wskaźnika funkcji na void *
nie zmienia reprezentacji. void *
Wartość wynikająca z takiego przekształcenia można przekształcić z powrotem do pierwotnego typu wskaźnik funkcji, za pomocą wyraźnego obsady, bez utraty informacji. Uwaga : Standard ISO C tego nie wymaga, ale jest to wymagane w celu zachowania zgodności z POSIX.
dlsym()
- zwróć uwagę na koniec sekcji „Użycie aplikacji”, w której jest napisane: Zauważ, że konwersja ze void *
wskaźnika do wskaźnika funkcji, jak w: fptr = (int (*)(int))dlsym(handle, "my_function");
nie jest zdefiniowana w standardzie ISO C. Ten standard wymaga tej konwersji, aby działała poprawnie w zgodnych implementacjach.