Я читав, що перетворення покажчика функції на покажчик даних і навпаки працює на більшості платформ, але не гарантовано. Чому це так? Чи не повинні обидва бути просто адресами в основну пам'ять і тому бути сумісними?
void
. Перетворення покажчика функції в void *
не повинно змінювати подання. void *
Значення в результаті такого перетворення може бути перетворена назад у вихідний тип покажчика функції, використовуючи явне приведення, без втрати інформації. Примітка : Стандарт ISO C цього не вимагає, але він необхідний для відповідності POSIX.
dlsym()
- зверніть увагу на кінець розділу "Використання програми", де зазначено: Зверніть увагу, що перетворення з void *
вказівника на функціональний покажчик, як у: fptr = (int (*)(int))dlsym(handle, "my_function");
не визначається стандартом ISO C. Цей стандарт вимагає, щоб це перетворення працювало коректно щодо відповідних реалізацій.