提问人:Kredns 提问时间:8/5/2009 最后编辑:Antti Haapala -- Слава УкраїніKredns 更新时间:6/1/2020 访问量:102892
为什么每次使用 malloc 时都会收到警告?
Why do I get a warning every time I use 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’
答:
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>
此文件包含内置函数的声明。如果你不这样做,编译器会认为你想定义你自己的函数,并警告你,因为:malloc
malloc
- 您没有明确声明它,并且
- 已经有一个同名的内置函数,其签名与隐式声明的签名不同(当隐式声明函数时,假定其返回和参数类型为 ,这与内置函数不兼容,后者接受 a 并返回 )。
int
malloc
size_t
void*
评论
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.h
malloc()
#include <stdlib.h>
原因,在这个问题的答案中得到了最好的解释:
上一个:分配二维数组的怪异方式?
下一个:Linux C 读取目录
评论