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

如果我在代码中使用 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’
102391 次浏览

你还没做 #include <stdlib.h>

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

#include <stdlib.h>

If you don't include this header file, the function is not known to the compiler. So it sees it as undeclared.

你需要加上:

#include <stdlib.h>

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

  1. You don't explicitly declare it 还有
  2. 已经有一个使用这个名称的内置函数,它与隐式声明的函数有不同的签名(当一个函数隐式声明时,它的返回值和参数类型被假定为 int,这与内置的 malloc不兼容,后者接受一个 size_t并返回一个 void*)。

养成寻求帮助的习惯。

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

使用:

man malloc

gives pretty useful results.

谷歌一下 man malloc会告诉你我的意思。

在 Unix 中,你也可以找到相关的东西。

除了其他非常好的答案,我想做一点挑剔,并涵盖一些什么是尚未讨论的其他答案。


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

你不是真的 必须的 #include <stdlib.h>

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

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

但是请注意,malloc.h的使用是不推荐的,它使您的代码不可移植。如果你想使用 malloc(),你应该始终和永远(除非明确的原因,做其他) #include <stdlib.h>

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

< stdlib.h > 与 < malloc.h > 的区别