Zeiger in Ganzzahlen für 64-Bit-Kompatibilität konvertieren
Eine vorhandene Codebasis, die ursprünglich für eine 32-Bit-Maschine entwickelt wurde, verwendet eine Funktion mit ein void*-Argument, das anschließend in einen geeigneten Typ innerhalb der Funktion konvertiert wird:
void function(MESSAGE_ID id, void* param) { if(id == FOO) { int real_param = (int)param; // ... } }
When Beim Anpassen dieses Codes an eine 64-Bit-Umgebung meldet der Compiler einen Fehler:
error: cast from 'void*' to 'int' loses precision
Um dieses Problem zu beheben, ist eine Änderung erforderlich, die auch die Kompatibilität mit 32-Bit-Maschinen gewährleistet.
Lösung
Für einen modernen C-Ansatz, reinterpret_cast
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
Korrekter Ganzzahltyp für die Zeigerspeicherung
Der empfohlene Datentyp zum Speichern von Zeigern als Ganzzahlen ist uintptr_t oder intptr_t. Diese Typen befinden sich im Verzeichnis
Geeigneter Casting-Operator
In C ist reinterpret_cast der bevorzugte Casting-Mechanismus für diese Konvertierung. Er ersetzt den Cast-Operator im C-Stil, der in C nicht mehr bevorzugt wird.
Das obige ist der detaillierte Inhalt vonWie konvertiert man Zeiger für 64-Bit-Kompatibilität sicher in Ganzzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!