Bir işlev işaretçisini bir veri işaretçisine dönüştürmenin ve bunun tersinin çoğu platformda çalıştığını, ancak çalışmasının garanti edilmediğini okudum. Bu neden böyle? Her ikisinin de basitçe ana belleğe adres olması ve dolayısıyla uyumlu olması gerekmez mi?
void
. Bir işlev işaretçisinin biçimine dönüştürülmesi void *
gösterimi değiştirmeyecektir. birvoid *
Böyle bir dönüşümden kaynaklanan değer, bilgi kaybı olmaksızın açık bir dönüşüm kullanılarak orijinal işlev işaretçisi tipine geri dönüştürülebilir. Not : ISO C standardı bunu gerektirmez, ancak POSIX uyumluluğu için gereklidir.
dlsym()
- 'Uygulama Kullanımı' bölümünün sonuna dikkat edin: '' gibi bir void *
işaretçiden bir işlev işaretçisine dönüşümün : fptr = (int (*)(int))dlsym(handle, "my_function");
ISO C standardı tarafından tanımlanmadığını unutmayın. Bu standart, bu dönüşümün uyumlu uygulamalarda doğru çalışmasını gerektirir.