【问题标题】:C implicit declaration of of built-in malloc内置 malloc 的 C 隐式声明
【发布时间】:2014-02-07 16:42:34
【问题描述】:

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

【问题讨论】:

  • 感兴趣的可能是“不要强制转换 malloc 线程”-stackoverflow.com/questions/605845/…
  • 不要强制转换 malloc
  • 隐式声明意味着编译器没有看到malloc的声明... stdlib.h defo 是否包含在此语句之前? (我知道你说过你做了,但可能值得仔细检查)。
  • 肯定 "&le_current" 在作业的左侧无效?我怀疑发生的事情比我们被告知/展示的要多。
  • le_current 需要mallocing 吗?

标签: c list struct malloc sizeof


【解决方案1】:

几乎可以肯定,&lt;stdlib.h&gt; 不包含在获取编译器警告消息(即隐式声明 malloc)的代码之前。您应该寻找以下情况:

  • #include &lt;stdlib.h&gt; 出现在条件代码中(由于预处理器语句,例如 #if#elif#else),实际上并未包含在内。
  • 收到警告的行早于包含&lt;stdlib.h&gt; 的行。
  • 您没有编译您认为的源文件。
  • 您尚未将编辑器缓冲区的内容保存到磁盘,因此正在编译的文件版本是旧版本,而不是您在编辑器中查看的版本。
  • 在包含&lt;stdlib.h&gt; 之前,有一个#definemalloc 替换为其他内容(并且可能在&lt;stdlib.h&gt; 之后包含一个#undef。(这种情况很少见,但可能。)

如果这些没有显示错误,您应该将问题简化为short, self-contained compilable example。这样做很可能会说明问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2013-12-28
    • 2020-09-01
    • 2014-03-27
    • 2012-02-29
    • 2016-08-10
    相关资源
    最近更新 更多