Ho letto che convertire un puntatore a funzione in un puntatore dati e viceversa funziona sulla maggior parte delle piattaforme ma non è garantito che funzioni. Perché è così? Entrambi non dovrebbero essere semplicemente indirizzi nella memoria principale e quindi essere compatibili?
void
. La conversione di un puntatore a funzione void *
non deve alterare la rappresentazione. Un void *
valore risultante da tale conversione può essere riconvertito nel tipo di puntatore a funzione originale, usando un cast esplicito, senza perdita di informazioni. Nota : lo standard ISO C non lo richiede, ma è necessario per la conformità POSIX.
dlsym()
- nota la fine della sezione "Uso dell'applicazione" dove dice: Nota che la conversione da un void *
puntatore a un puntatore a funzione come in: fptr = (int (*)(int))dlsym(handle, "my_function");
non è definita dallo standard ISO C. Questo standard richiede che questa conversione funzioni correttamente su implementazioni conformi.