Home >Backend Development >C++ >How to Safely Cast Pointers to Integers in Modern C ?
When migrating code to a 64-bit machine, it becomes necessary to address issues related to pointer conversion. In a function with a void argument, where the argument is cast to an appropriate type within the function, the following error may arise: "cast from 'void' to 'int' loses precision."
To resolve this issue and ensure compatibility across 32-bit and 64-bit machines, the following C 11 approach is recommended:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
The std::uintptr_t type is specifically designed to represent pointer values and addresses. Using reinterpret_cast ensures a safe and explicit conversion between the void* pointer and the integer representation.
C 11 (and onwards) 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;
It's important to note that while uintptr_t provides a safe way to store pointer values as integers, it may not necessarily align with the size of an integer in all cases. Hence, it is recommended to use the appropriate type for storing and manipulating integer values.
The above is the detailed content of How to Safely Cast Pointers to Integers in Modern C ?. For more information, please follow other related articles on the PHP Chinese website!