Saya telah membaca bahwa mengonversi fungsi pointer ke data pointer dan sebaliknya berfungsi pada sebagian besar platform tetapi tidak dijamin berfungsi. Mengapa demikian? Bukankah keduanya seharusnya hanya alamat ke memori utama dan karenanya kompatibel?
void
. Konversi dari pointer fungsi ke void *
tidak akan mengubah representasi. Sebuah void *
nilai yang dihasilkan dari konversi tersebut dapat dikonversi kembali ke jenis pointer fungsi asli, menggunakan cast yang eksplisit, tanpa kehilangan informasi. Catatan : Standar ISO C tidak memerlukan ini, tetapi diperlukan untuk kesesuaian POSIX.
dlsym()
- perhatikan bagian akhir 'Penggunaan Aplikasi' di mana dikatakan: Perhatikan bahwa konversi dari void *
pointer ke pointer fungsi seperti pada: fptr = (int (*)(int))dlsym(handle, "my_function");
tidak ditentukan oleh standar ISO C. Standar ini mengharuskan konversi ini bekerja dengan benar pada penyesuaian implementasi.