我正在开发一个项目,其中我有一个标题,它定义了list
和list_elem
结构,就像实际的c库一样(列表的实现没有错误)。我正在编写一个使用列表实现的源文件,并收到以下警告:
warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
这是list_elem
结构
/* List element. */
struct list_elem
{
struct list_elem *prev; /* Previous list element. */
struct list_elem *next; /* Next list element. */
};
我在这里使用:
//creates a list element
struct list_elem le_current;
&le_current = (struct list_elem *)malloc(sizeof(struct list_elem));
我知道同一个问题还有另一个问题,但与那个人不同,我确实包含了
#include <stdlib.h>
以及定义列表的标题
#include "lib/kernel/list.h"
答案 0 :(得分:6)
几乎可以肯定,在获取编译器警告消息<stdlib.h>
被隐式声明的代码之前,malloc
不包括在内。您应该寻找以下情况:
#include <stdlib.h>
出现在条件代码中(由于预处理程序语句,例如#if
,#elif
或#else
),实际上并未包括在内。<stdlib.h>
的行。<stdlib.h>
之前,有一个#define
用其他内容替换malloc
(在#undef
被包含后可能会<stdlib.h>
。是罕见但可能的。)如果这些没有显示错误,您应该将问题减少到short, self-contained compilable example。这样做很可能会解决这个问题。