首页 > 代码库 > 这样的类型转换,你用过吗

这样的类型转换,你用过吗

最近在做64位代码移植,代码中到处充斥着类型转换,到处报编译警告和错误,比如以下使用:

unsigned int ret=0,*p=NULL;

p = (unsigned int *)malloc(sizeof(4));

ret = (unsigned int )p;

以上这段代码,在32位编译系统中没问题,但是在64位编译系统中就会报错,说是类型转换size不一样,因为在64位,所有指针类型全是8个字节,而unsigned int 是4个字节;此时我们可以做如下适配:

ret = (uintptr_t)p;

之所以可以这样做,是因为Linux内核在定义这个类型时已经做了64位和32位区分。



这样的类型转换,你用过吗