从C++过渡到现在,我正在学习C的黑暗艺术,并开发了以下代码来取代我对模板的需求。在底部的例子中,我已经实现了你的花园式的Node结构,它可以用来存储任何数据类型。考虑以下...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;
}
同样,问题在于警告这段代码的免费编译 - 即使用gcc编译器,虽然我的wxDevCpp的Windows也给了我一些警告,但挑剔的要少得多关于它。我把它归咎于GUI。
任何帮助将不胜感激。
如果可能的类型是有限的,你可以使用一个大的联合(如果你想指向一个结构,它仍然可以包含一个void-pointer)。或者你可以使用一个字节向量(例如unsigned char [8]),它足够大以存储任何可能的数据类型,并使用memcpy存储数据并进行转换以从中获取数据。 – Patrick 2010-10-12 13:12:34
工会值得使用吗?这对我仍然不清楚。 – 2010-10-12 13:28:07