114

如果我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’
4

5 回答 5

227

您需要添加:

#include <stdlib.h>

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

  1. 您没有明确声明它并且
  2. 已经有一个同名的内置函数,其签名与隐式声明的签名不同(当隐式声明函数时,它的返回和参数类型被假定为int,这与内置函数不兼容in malloc,它接受 asize_t并返回 a void*)。
于 2009-08-04T23:19:24.360 回答
30

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

于 2009-08-04T23:18:34.067 回答
16

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

#include <stdlib.h>

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

于 2009-08-04T23:18:53.537 回答
10

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

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

使用 :

man malloc

给出了非常有用的结果。

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

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

于 2009-08-04T23:23:27.613 回答
0

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


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

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

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

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

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

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

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

于 2020-05-31T12:22:03.470 回答