C语言中的无警告模板

时间:2010-10-12 13:05:41

标签: c data-structures casting templating gcc-warning

从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 for Windows也给了我一些警告,但对它不那么挑剔。我把它归咎于GUI。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

对我来说,只需为malloc(<stdlib.h>)添加正确的include,即可使用gcc -std=c89 -Wall -Wextra -pedantic免费编译警告。

答案 1 :(得分:2)

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

另一个警告是关于//,这不是C89中的有效评论。要使该警告消失,请使用/* */进行评论或告诉gcc使用C99。