我正在研究一个项目,在该项目中,我的标题定义了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"
几乎可以肯定的是,在获取编译器警告消息的代码之前,不包括<stdlib.h>
,即 malloc
被隐式声明。您应该寻找以下情况:
-
#include <stdlib.h>
出现在条件代码中(由于预处理器语句,例如#if
,#elif
或#else
),实际上不包括。 - 获得警告的行比包括
<stdlib.h>
的行早。 - 您没有编译您认为自己的源文件。
- 您尚未将编辑器的缓冲区的内容保存到磁盘上,因此要编译的文件的版本是旧的,而不是您在编辑器中查看的文件。
- 在包括
<stdlib.h>
之前,有一个#define
用其他内容代替malloc
(可能包括<stdlib.h>
之后的#undef
。
如果这些没有显示出错误,则应将问题减少到一个简短的,独立的可编译示例。这样做的行动很可能会阐明问题。