将32位int转换为64 void*指针而不发出警告

Wei*_*Shi 4 c 64-bit void-pointers

我在C中有一个"通用"链接链接,void * data用于将数据存储在节点中.

insertNode(linkedList * list, void *data);

//Storing/retrieving a string works fine;
char *str="test"; 
insertNode(list, str);
char *getback=(char *)node->data;

//Storing/retrieving an Int results a cast warning
int num=1;
insertNode(list,(void *)num);
int getback=(int)node->data;
Run Code Online (Sandbox Code Playgroud)

这是因为int是32位,但void *在x64机器上是64位.摆脱这个错误的最佳做法是什么?

Bla*_*iev 14

使用intptr_tuintptr_t.它们是与指针大小相同的整数:

#include <stdint.h>
...
intptr_t num = 1;
insertNode(list, (void *) num);
intptr_t getback = (intptr_t) node->data;
Run Code Online (Sandbox Code Playgroud)

当然,您可以存储的最大值取决于系统,但您可以在编译时通过INTPTR_MIN和检查它INTPTR_MAX.