C内置malloc的隐式声明

oct*_*ian 1 c malloc struct list sizeof

我正在开发一个项目,其中我有一个标题,其定义listlist_elem结构很像实际的c库(列表的实现没有错误).我正在编写一个使用列表实现的源文件,并收到以下警告:

warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

这是list_elem结构的声明

/* List element. */
struct list_elem 
  {
    struct list_elem *prev;     /* Previous list element. */
    struct list_elem *next;     /* Next list element. */
  };
Run Code Online (Sandbox Code Playgroud)

我在这里用的是:

//creates a list element
struct list_elem le_current;
&le_current = (struct list_elem *)malloc(sizeof(struct list_elem));
Run Code Online (Sandbox Code Playgroud)

我知道有同样问题的另一个问题,但与那个人不同,我确实包括了

#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)

以及定义列表的标题

#include "lib/kernel/list.h"
Run Code Online (Sandbox Code Playgroud)

Eri*_*hil 6

几乎可以肯定的<stdlib.h>是,在获取malloc隐式声明的编译器警告消息的代码之前不包含该内容.您应该寻找以下情况:

  • #include <stdlib.h>出现在条件代码(由于预处理器语句如#if,#elif,或#else),并且实际上不包括在内.
  • 获得警告的行早于包含的行<stdlib.h>.
  • 您没有编译您认为的源文件.
  • 您尚未将编辑器缓冲区的内容保存到磁盘,因此正在编译的文件版本是旧版本,而不是您在编辑器中查看的版本.
  • <stdlib.h>包括之前,有一个#define替换malloc其他东西(并且可能包含#undef后面的<stdlib.h>内容.(这很少但可能.)

如果这些没有显示错误,您应该将问题简化为一个简短的,自包含的可编译示例.这样做很可能会解决问题.