0

从 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 编译器,尽管我的 Windows 版 wxDevCpp 也给了我一些警告,但对它不那么挑剔。我把它归咎于 GUI。

任何帮助将不胜感激。

4

2 回答 2

2

对我来说,只需为 malloc ( <stdlib.h>) 添加正确的包含,就可以使您的代码编译无警告:gcc -std=c89 -Wall -Wextra -pedantic

于 2010-10-12T13:11:45.743 回答
2

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

另一个警告是关于//which 不是 C89 中的有效注释。要使该警告消失,请使用/* */注释或告诉 gcc 使用 C99。

于 2010-10-12T13:12:05.430 回答