在寻找有关calloc的信息时,我在source code创建了
char *malloc();
在calloc函数中。
它是否将void * malloc(size_t)强制转换为返回char *?
的函数指针这个语法不能为我编译。
答案 0 :(得分:4)
在过去,在 ANSI C 提供void *
作为通用指针类型之前,char *
用于此目的。
代码来自Version 7 Unix的来源,它于1979年发布(在 ANSI C 之前)。
这就是it's necessary to cast the return value of malloc()
in the old pre-ANSI code的原因。
参考:C FAQ
答案 1 :(得分:3)
这是来自一些非常古老的源代码。您正在查看1979年发布的UNIX Version 7中的代码。从那时起C语言发生了重大变化。
这不是演员;这是一个功能声明。强制转换由带括号的类型名称后跟表达式组成,例如(int)foo
。
此外,它是一个旧式函数声明,一个非原型,不指定参数的类型。 (但它仍然是有效的语法。)
它声明malloc
是一个返回类型char*
结果的函数。 (它不定义 malloc
函数;必须在别处完成。)
在现代C中(自1989年以来),malloc
返回类型void*
的结果并且具有类型size_t
的单个参数,因此声明将是:
void *malloc(size_t);
但该声明由标准<stdlib.h>
标题提供,因此无需自行提供声明。
legal 在其他函数中包含函数声明,但它很少是一个特别好的主意。