【发布时间】:2010-10-12 13:05:41
【问题描述】:
从 C++ 过渡,我现在正在学习 C 的黑暗艺术,并开发了以下代码来代替我对模板的需求。在底部的示例中,我已经实现了您的普通节点结构,它可以用于存储任何数据类型。考虑以下...
// vptr.c
#include <stdio.h>
struct Node
{
void* data;
struct Node* next;
};
int main()
{
struct Node n0, n1;
n0.next = &n1;
n0.data = malloc(sizeof(int));
*((int*) n0.data) = 3;
printf("%d\n", *((int*) n0.data));
return 0;
}
同样,问题在于此代码的 warning free 编译——即使用 gcc 编译器,尽管我的 wxDevCpp for Windows 也给了我一些警告,但对它不那么挑剔。我把它归咎于 GUI。
任何帮助将不胜感激。
【问题讨论】:
-
如果可能的类型有限,你可以使用一个大联合(如果你想指向一个结构,它仍然可以包含一个空指针)。或者您可以使用一个字节向量(例如 unsigned char [8]),它的大小足以存储任何可能的数据类型,并使用 memcpy 来存储数据并从中获取数据)。
-
什么时候值得使用工会?我还不清楚。
标签: c data-structures casting templating gcc-warning