为什么每次使用 malloc 时都会收到警告?

Why do I get a warning every time I use malloc?

提问人:Kredns 提问时间:8/5/2009 最后编辑:Antti Haapala -- Слава УкраїніKredns 更新时间:6/1/2020 访问量:102892

问:

如果我在我的代码中使用: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 警告 sizeof

评论


答:

30赞 chaos 8/5/2009 #1

你还没有做.#include <stdlib.h>

16赞 andri 8/5/2009 #2

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

#include <stdlib.h>

如果不包含此头文件,则编译器不知道该函数。因此,它将其视为未声明。

228赞 sepp2k 8/5/2009 #3

您需要添加:

#include <stdlib.h>

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

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

评论

5赞 Jens 10/13/2012
术语:C语言中没有内置函数,malloc只是标准C库中的一个函数。
5赞 sepp2k 10/13/2012
@Jens 我认为将标准库函数称为内置函数没有问题 - 而且 gcc 人员显然也没有问题,因为错误消息也使用了“内置”一词(这就是我这样做的原因)。
7赞 Jens 10/13/2012
@sepp2k嗯,我确实看到了一个问题。用法不规范。编译器可以有内置函数,gcc 可以有内置的 malloc。但正如我所写的,在 C 语言中,没有内置函数。
10赞 Tim Williscroft 8/5/2009 #4

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

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

用:

man malloc

给出了非常有用的结果。

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

在 unix 中,您还可以获得相关事物的适当性。

评论

1赞 Mechanical snail 11/1/2011
只有当你已经知道概要中的行意味着你必须在你的程序中编写它时。#include <stdlib.h>
1赞 MikeKulls 7/29/2013
如果有人在这里阅读了其他答案,那么他们现在就会知道这一点。
0赞 RobertS supports Monica Cellio 5/31/2020 #5

除了其他非常好的答案之外,我还想做一些吹毛求疵的事情,并涵盖其他答案中尚未讨论的内容。


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

你实际上不必.#include <stdlib.h>

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

你也可以代替。#include <malloc.h>

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

原因,在这个问题的答案中得到了最好的解释:

<stdlib.h> 和 <malloc.h> 之间的区别