코드를 64비트 시스템으로 마이그레이션할 때 포인터 변환과 관련된 문제를 해결해야 합니다. void 인수가 있는 함수에서 인수가 함수 내의 적절한 유형으로 캐스팅되는 경우 "'void'에서 'int'로 캐스팅하면 정밀도가 떨어집니다."
오류가 발생할 수 있습니다.이 문제를 해결하고 32비트 및 64비트 시스템 간의 호환성을 보장하려면 다음 C 11 접근 방식을 권장합니다.
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
std::uintptr_t 유형은 포인터 값을 나타내도록 특별히 설계되었습니다. 그리고 주소. reinterpret_cast를 사용하면 void* 포인터와 정수 표현 간의 안전하고 명시적인 변환이 보장됩니다.
C 11(및 이후 버전) 버전:
#include <cstdint> std::uintptr_t i;
C 03 버전:
extern "C" { #include <stdint.h> } uintptr_t i;
C99 버전:
#include <stdint.h> uintptr_t i;
uintptr_t가 포인터 값을 정수로 저장하는 안전한 방법을 제공하지만 모든 경우에 정수 크기와 반드시 일치할 필요는 없습니다. 따라서 정수값을 저장하고 조작하는데 적합한 타입을 사용하는 것이 좋습니다.
위 내용은 Modern C에서 포인터를 정수로 안전하게 캐스팅하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!