c内置malloc的隐性声明



我正在研究一个项目,在该项目中,我的标题定义了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"

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

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

如果这些没有显示出错误,则应将问题减少到一个简短的,独立的可编译示例。这样做的行动很可能会阐明问题。

相关内容

  • 没有找到相关文章

最新更新