Приведите int к указателю - зачем сначала приводить к long? (как в p = (void *) 42;)

вGLib Документация, есть глава о макросах преобразования типов. В дискуссии о преобразованииint к*void указатель это говорит (выделение мое):

Наивно, вы можете попробовать это, но это неверно:

gpointer p;
int i;
p = (void*) 42;
i = (int) p;

Опять же, этот пример был неверным, не копируйте его.Проблема в том, что на некоторых системах вам нужно сделать это:

gpointer p;
int i;
p = (void*) (long) 42;
i = (int) (long) p;

(источник: Справочное руководство по GLib для GLib 2.39.92, главаМакросы преобразования типов ).

Почему это приведено кlong необходимо?

Если любое необходимое расширениеint не происходит автоматически как часть приведения к указателю?

Ответы на вопрос(2)

Ваш ответ на вопрос