2014-07-25 5 views
-7

이 코드 스 니펫을 발견했습니다. 어떻게 작동하는지 모르겠습니다.포인터에 정수를 캐스팅합니다.

v = (buf *) ((uintptr_t) wc.wr_id) 

왜 포인터를 캐스팅하기 전에 여기에 uintptr_t가 사용되는지 이해할 수 없습니까? 이러한 변수는 다음과 같이 정의된다 : 친밀한 하드웨어에 대한 지식이 코드는 64 비트 정수의 포인터 값을 저장하는 비 이식 가능한 코드를 사용하고 실행되는 소프트웨어

struct ibv_exp_wc { 
    uint64_t  wr_id; 
    enum wc_status status; 
}wc; 

buf *v = NULL; 
uint64_t wr_id; 

답변

0

사람. 왜이 일을하고 있는지 모르겠다.

왜 여분의 캐스트가 필요한가요? 어쩌면이 사람이 사용하는 특정 컴파일러는 uintptr_t에서 buf *으로의 변환 결과를 정의하지만 uint64_t에서 buf *으로의 변환을 정의하지 않을 수도 있습니다. 아니면 과장된 컴파일러의 성가신 경고를 음소거하는 것일 수도 있습니다. 아마 둘 다. 아니면 위의 어느 것도. 당신이 우리에게 주신 작은 정보로는 말할 길이 없습니다.

관련 문제