Bei der Migration von Code auf eine 64-Bit-Maschine müssen Probleme im Zusammenhang mit der Zeigerkonvertierung behoben werden. In einer Funktion mit einem void-Argument, bei der das Argument in einen geeigneten Typ innerhalb der Funktion umgewandelt wird, kann der folgende Fehler auftreten: „Umwandlung von ‚void‘ nach ‚int‘ verliert an Präzision.“
Um dieses Problem zu beheben und die Kompatibilität zwischen 32-Bit- und 64-Bit-Maschinen sicherzustellen, wird der folgende C 11-Ansatz empfohlen:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
Der Der Typ std::uintptr_t ist speziell für die Darstellung von Zeigerwerten und Adressen konzipiert. Die Verwendung von reinterpret_cast gewährleistet eine sichere und explizite Konvertierung zwischen dem void*-Zeiger und der Ganzzahldarstellung.
C 11 (und höher) Version:
#include <cstdint> std::uintptr_t i;
C 03 Version:
extern "C" { #include <stdint.h> } uintptr_t i;
C99-Version:
#include <stdint.h> uintptr_t i;
Es ist wichtig zu beachten, dass uintptr_t zwar eine sichere Möglichkeit zum Speichern von Zeigerwerten als Ganzzahlen bietet, Es muss nicht unbedingt in allen Fällen mit der Größe einer Ganzzahl übereinstimmen. Daher wird empfohlen, den entsprechenden Typ zum Speichern und Bearbeiten von Ganzzahlwerten zu verwenden.
Das obige ist der detaillierte Inhalt vonWie kann man in modernem C sicher Zeiger auf Ganzzahlen umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!