在查找有关calloc的信息时,我在源代码中找到了:
char *malloc();
在胼胝体功能中。
它是否将void*malloc(size_t)转换为返回char*的函数指针?
这个语法不适合我编译。
过去,在ANSI C提供void *
作为通用指针类型之前,char *
用于此目的。
代码来自Unix版本7,它于1979年发布(在ANSI C之前)。
这就是为什么有必要在旧的ANSI之前的代码中强制转换malloc()
的返回值。
参考:C常见问题
这来自一些非常古老的源代码。您看到的是1979年发布的UNIX版本7中的代码。从那时起,C语言发生了实质性的变化。
这不是演员阵容;这是一个函数声明。强制转换由一个带括号的类型名称和一个表达式(如(int)foo
)组成。
此外,它是一个旧式函数声明,一个不指定参数类型的非原型。(不过,它仍然是有效的语法。)
它声明malloc
是一个返回类型为char*
的结果的函数。(它没有定义malloc
函数;这必须在其他地方完成。)
在现代C中(自1989年以来),malloc
返回类型为void*
的结果,并且有一个类型为size_t
的单个参数,因此声明为:
void *malloc(size_t);
但是该声明是由标准<stdlib.h>
标头提供的,因此不需要自己提供声明。
在其他函数中包含函数声明是合法的,但这很少是一个特别好的主意。