Фон
стандарт POSIX добавляет множество функций библиотеки и других идентификаторов к языку C. В описании функции dlsym()
она говорит (с моим акцентом):
СИНТАКСИС
#include <dlfcn.h> void *dlsym(void *restrict handle, const char *restrict name);
ОПИСАНИЕ
Функция dlsym() должна получить адрес символа ( идентификатор функции или идентификатор объекта данных)...
Стандарт C не гарантирует, что указатель функции может быть преобразован в void *
, или даже если размер указателей одинаковый. Это эффективно добавляет дополнительное ограничение на систему типа C.
Вопрос
Мой вопрос:
- Существует ли нормативная ссылка для этого ограничения системы типа C, или она выводима только из описания некоторых библиотечных функций?
- Является ли POSIX даже реализуемым в системе, где
sizeof (function pointer) > sizeof (void *)
?
Ссылки
- Стандарт C11 (окончательный публичный проект): n1570
- Стандарт POSIX от Открытая группа: POSIX. 1-2008
- Функция POSIX
dlsym()