Приведите 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
не происходит автоматически как часть приведения к указателю?