我遇到了这段代码。我不确定它是如何工作的?
v = (buf *) ((uintptr_t) wc.wr_id)
我不明白为什么在转换为指针之前使用uintptr_t?这些变量定义如下:
struct ibv_exp_wc {
uint64_t wr_id;
enum wc_status status;
}wc;
buf *v = NULL;
uint64_t wr_id;
答案 0 :(得分:0)
对运行此代码的硬件和软件有深入了解的人正在使用非可移植代码将指针值存储在64位整数中。为什么要这样做,我不知道。
为什么需要额外演员?也许这个人正在使用的特定编译器定义了从uintptr_t
到buf *
但不是从uint64_t
到buf *
的转换结果,或者可能只是为了让烦恼变得沉默来自过度热心的编译器的警告。也许两者。或者以上都不是。从你给我们的小信息中无法分辨出来。