Cast int to pointer - warum zuerst auf long setzen? (wie in p = (void *) 42;)
In demGLib Dokumentation gibt es ein Kapitel über Typkonvertierungsmakros. In der Diskussion um die Konvertierung einesint
zu einem*void
Zeiger heißt es (Hervorhebung von mir):
Naiv könnten Sie dies versuchen, aber es ist falsch:
gpointer p;
int i;
p = (void*) 42;
i = (int) p;
Auch dieses Beispiel war nicht korrekt, kopieren Sie es nicht.Das Problem ist, dass Sie dies auf einigen Systemen tun müssen:
gpointer p;
int i;
p = (void*) (long) 42;
i = (int) (long) p;
(Quelle: GLib Referenzhandbuch für GLib 2.39.92, KapitelTypkonvertierungsmakros ).
Warum ist das so?long
notwendig?
Sollte eine Verbreiterung desint
nicht automatisch als teil des casts auf einen zeiger passieren?