>>156937Anderer Felix: Ich weiß nicht, welche dunkle Magie hinter Zeile 769 bzw. 778 steckt, aber die Git-Beschuldigung sagt aus [0], warum das zusätzliche Geraffel für GCC 9.2 und höher ergänzt wurde:
- aktuelles GCC warnt mit
-Wstrict-aliasing
vor Type-Punning, wenn man allzu frei Pointer-Casts verwendet
- wie schon in
>>156887 verlinkt ist die compilerspezifische Lösung für GCC schon immer ein Union gewesen (hier mit einem zusätzlichen Assert dekoriert, dass zumindest auch die Größe übereinstimmt)
-
C_GNUC_EXTENSION
bzw.
__extension__
ist dafür da, den Code auch mit
-pedantic
kompilieren zu können
- die eigentliche GObject-Typüberprüfung und -Referenzzählung findet nach wie vor in der Inline-Funktion
g_set_object
statt
Der C-Standard sieht memcpy vor (und aktuelles C++ hat std::bit_cast), aber damit hat man unter Umständen eine unnötige Kopie des Zeigers.
[0] https://gitlab.gnome.org/GNOME/glib/-/commit/51acb01f73da2ba7eb8838745df05bdd044a2636