【发布时间】:2013-12-15 05:17:31
【问题描述】:
我一直在与一个相当奇怪的情况作斗争。
我必须在 C 中实现一些 ADT 并使用它们。在使用 ADT 时,我有一个 typedef'ed void *。
当我尝试使用 int 值时,尝试返回一个预期为 void * 的 int,我收到警告“return make pointer from integer without a cast”。所以我想,我只是施放它。
但后来我遇到了this thread,它引导我不要做这样的事情,将 int 转换为 void *。不过,我不得不尝试。所以我收到了这个警告-“从不同大小的整数转换为指针”。
无论如何,我意识到——也许我可以直接返回 int,因为这只是在 ADT 的使用文件中。所以我更改了返回类型 - 我在其他地方收到了相同的警告,原因几乎相同,据我所知。
请帮助我摆脱这些警告。在这种情况下我该怎么办?我经历了一些关于这个问题的线程(比如我链接的那个),但其中任何一个都没有真正解决我的问题。
我有问题的功能: (MapKeyElement 是 typedef'ed void *)
static MapKeyElement copyKeyID(MapKeyElement n) {
if (!n) {
return 0;
}
int *copy = malloc(sizeof(int));
if (!copy) {
return NULL;
}
*copy = *(int *)&n;
return (void *)*copy;
}
感谢您的宝贵时间!
【问题讨论】:
标签: c casting void-pointers type-conversion abstract-data-type