【问题标题】:Why do I get a warning every time I use malloc?为什么每次使用 malloc 时都会收到警告?
【发布时间】:2010-11-16 20:29:36
【问题描述】:

如果我在我的代码中使用malloc

int *x = malloc(sizeof(int));

我从gcc 收到此警告:

new.c:7: warning: implicit declaration of function ‘malloc’  
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’

【问题讨论】:

    标签: c gcc malloc warnings sizeof


    【解决方案1】:

    养成在帮助中查找函数的习惯。

    C 的大多数帮助都以 unix 手册页为模型。

    使用:

    man malloc
    

    给出了非常有用的结果。

    谷歌搜索 man malloc 会告诉你我的意思。

    在 unix 中,您还可以对相关的事物进行适当的处​​理。

    【讨论】:

    • 只有当你已经知道概要中的 #include <stdlib.h> 行意味着你必须在你的程序中编写它。
    • 如果有人在这里阅读了其他答案,那么他们现在就会知道了。
    【解决方案2】:

    除了其他非常好的答案之外,我想做一点点挑剔并涵盖其他答案中尚未讨论的内容。


    当你在 Linux 时,要在你的代码中使用malloc()

    您实际上并不必须 #include <stdlib.h>

    (尽管stdlib.h 的使用非常普遍,可能每个非玩具程序都应该包含它,因为它提供了广泛的有用的 C 标准库函数和宏)

    您也可以改为#include <malloc.h>

    但请注意,不推荐使用malloc.h,这会使您的代码不可移植。如果你想使用malloc(),你应该永远和永远(除非有明确的理由不这样做)#include <stdlib.h>

    为什么的原因最好在这个问题的答案中得到解释:

    difference between <stdlib.h> and <malloc.h>

    【讨论】:

      【解决方案3】:

      你需要添加:

      #include <stdlib.h>
      

      此文件包含内置函数malloc 的声明。如果你不这样做,编译器会认为你想定义你自己的函数,名为malloc,它会警告你,因为:

      1. 您没有明确声明它并且
      2. 已经有一个同名的内置函数,它的签名与隐式声明的函数不同(当函数被隐式声明时,它的返回和参数类型被假定为int,这不是t 与内置的malloc 兼容,它接受size_t 并返回void*)。

      【讨论】:

      • 术语 nit:C 中没有内置函数。malloc 只是标准 C 库中的一个函数。
      • @Jens 我认为将标准库函数称为内置函数没有问题- gcc 人员显然也没有,因为错误消息也使用了“内置”一词(这就是我这样做的原因)。
      • @sepp2k 好吧,我确实看到了一个问题。用法不规范。 编译器 可以有内置函数,gcc 可能有 malloc 内置。但正如我所写,在 C 中,没有内置函数。
      【解决方案4】:

      需要包含声明函数的头文件,例如:

      #include <stdlib.h>
      

      如果不包含此头文件,则编译器不知道该函数。所以它认为它是未声明的。

      【讨论】:

        【解决方案5】:

        你还没有完成#include &lt;stdlib.h&gt;

        【讨论】:

          猜你喜欢
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多