C无类型指针转int类型警告如何屏蔽

code

#include <stdio.h>
int main(){
  int i=10;
  void *v=&i;
  int i2=(int)v;
  printf("%d\n",i2);
  return 1;
}

在编译是出现下面的警告

../src/c-base-point.c:12:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
   int i2=(int)v;
          ^
Finished building: ../src/c-base-point.c

我知道这仅仅是1个警告,可以不用理会,但是如何屏蔽这个警报呢?

阅读 4.1k
1 个回答

int 类型不一定可以保存一个指针。比如 64 位系统中,sizeof(int) 可以是 4 ,而 sizeof(void*) 则可以是 8 。于是指针转换为 int 会丢失信息,于是会有警告。

这里,你需要在 <inttypes.h> 中定义 intptr_t 类型,保证可以放得下一个 void * 。输出是也不能用 %d ,而需要使用同样定义在 <inttypes.h> 里的 PRIdPTR (这是一个宏)。就像这样:

#include <stdio.h>
#include <inttypes.h>
int main(){
  int i=10;
  void *v=&i;
  intptr_t i2=(intptr_t)v;
  printf("%" PRIdPTR  "\n",i2);
  return 1;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进