c / expert
Snippet
Strict-Aliasing-sicheres Type Punning durch byteweises Kopieren
Direktes Pointer-Casting zwischen inkompatiblen Typen verletzt die Strict-Aliasing-Regel und führt zu fehlerhaften Compiler-Optimierungen. Die Verwendung von memcpy interpretiert bitweise Muster sicher neu und wird von modernen Compilern zu Register-Befehlen wegoptimiert.
snippet.c
c
1
2
3
4
5
6
7
8
9
#include <stdio.h>#include <string.h>#include <stdint.h>uint32_t float_to_raw_bits(float val) {uint32_t bits;memcpy(&bits, &val, sizeof(val));return bits;}
Erklärung
1
uint32_t bits;
Deklariert eine Zielvariable gleicher Byte-Größe zum Speichern der neu interpretierten Bits.
2
memcpy(&bits, &val, sizeof(val));
Führt einen rohen Byte-Kopiervorgang aus, der undefiniertes Verhalten verhindert.
3
return bits;
Gibt die rohe uint32_t-Bits-Repräsentation zurück, ohne den IEEE-754-Wert zu verändern.