C中的无警告模板 从C++中过渡,我现在学习C的黑暗艺术,并且开发了下面的代码来代替模板的需要。在下面的示例中,我实现了您的garden variety节点结构,它可以用于存储任何数据类型。考虑下面……/P> // 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; } //vptr.c #包括 结构体类型 { 作废*数据; 结构节点*下一步; }; int main() { 结构节点n0,n1; n0.next=&n1; n0.data=malloc(sizeof(int)); *((int*)n0.data)=3; printf(“%d\n”,*((int*)n0.data)); 返回0; }

C中的无警告模板 从C++中过渡,我现在学习C的黑暗艺术,并且开发了下面的代码来代替模板的需要。在下面的示例中,我实现了您的garden variety节点结构,它可以用于存储任何数据类型。考虑下面……/P> // 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; } //vptr.c #包括 结构体类型 { 作废*数据; 结构节点*下一步; }; int main() { 结构节点n0,n1; n0.next=&n1; n0.data=malloc(sizeof(int)); *((int*)n0.data)=3; printf(“%d\n”,*((int*)n0.data)); 返回0; },c,data-structures,casting,templating,gcc-warning,C,Data Structures,Casting,Templating,Gcc Warning,同样,问题在于此代码的无警告编译--即使用gcc编译器,尽管我的wxDevCpp for Windows也给了我一些警告,但对此不太挑剔。我把责任归咎于GUI 任何帮助都将不胜感激。对于我来说,只需为malloc添加正确的include()就可以让您的代码编译时无需警告:gcc-std=c89-Wall-Wextra-pedantic对于我来说,只需为malloc添加正确的include()使您的代码编译时不出现警告:gcc-std=c89-Wall-Wextra-pedanticmalloc是

同样,问题在于此代码的无警告编译--即使用gcc编译器,尽管我的wxDevCpp for Windows也给了我一些警告,但对此不太挑剔。我把责任归咎于GUI


任何帮助都将不胜感激。

对于我来说,只需为malloc添加正确的include(
)就可以让您的代码编译时无需警告:
gcc-std=c89-Wall-Wextra-pedantic
对于我来说,只需为malloc添加正确的include(
)使您的代码编译时不出现警告:
gcc-std=c89-Wall-Wextra-pedantic
malloc
是在stdlib.h中声明的,您没有包括它。因此,如果添加
#include
,警告就会消失


另一个警告是关于
/
,它在C89中不是有效的注释。若要消除该警告,请使用
/**/
进行注释,或告诉gcc使用C99。

malloc
在stdlib.h中声明,但您没有包括它。因此,如果添加
#include
,警告就会消失


另一个警告是关于
/
,它在C89中不是有效的注释。若要消除该警告,请使用
/***/
进行注释,或告诉gcc使用C99。

如果可能的类型有限,可以使用大联合(如果要指向结构,它仍然可以包含一个空指针)。或者你可以使用一个字节向量(例如unsigned char[8]),它足够大,可以存储任何可能的数据类型,并使用memcpy存储数据,使用casting从中获取数据)。什么时候值得使用联合?这对我来说还不清楚。如果可能的类型有限,你可以使用一个大联合(如果你想指向一个结构,它仍然可以包含一个空指针)。或者你可以使用一个字节向量(例如unsigned char[8]),它足够大,可以存储任何可能的数据类型,并使用memcpy存储数据,使用casting从中获取数据)。什么时候值得使用联合?我还不清楚,谢谢大家。我为我的语法感到骄傲,现在我觉得自己很迟钝;PI会说“声明在”而不是“定义在”,声明对用户程序员来说才是重要的。谢谢大家。我为我的语法感到骄傲,现在我觉得自己很迟钝;PI会说“在中声明”,而不是“在中定义”,声明对用户程序员来说才是重要的。