Из спецификации C99, раздел 6.2.5, параграф 27:
Указатель на void должен иметь те же требования к представлению и выравниванию, что и указатель на тип символа.Аналогично, указатели на квалифицированные или неквалифицированные версии совместимых типов должны иметь одинаковые требования к представлению и выравниванию.Все указатели на типы конструкций должны иметь те же требования к представлению и выравниванию, что и другие.Все указатели на типы объединения должны иметь те же требования к представлению и выравниванию, что и другие.Указатели на другие типы не обязательно должны иметь одинаковые требования к представлению или выравниванию.
Так что нет;нет никакой гарантии, что void *
может содержать указатель на функцию.
И раздел 6.3.2.3, пункт 8:
Указатель на функцию одного типа может быть преобразован вуказатель на функцию другого типа и обратно;результат должен сравниваться равным исходному указателю.
, подразумевая, что один тип указателя на функцию может содержать любое другое значение указателя на функцию.Технически это не то же самое, что гарантировать, что типы указателей на функции не могут различаться по размеру, просто их значения занимают тот же диапазон, что и другие.