C内置malloc的隐式声明

时间:2014-02-07 16:42:35

标签: c list struct malloc sizeof

我正在开发一个项目,其中我有一个标题,它定义了listlist_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"

1 个答案:

答案 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。这样做很可能会解决这个问题。