函数指针在声明时强制转换

时间:2014-02-14 01:18:53

标签: c pointers malloc function-pointers

在寻找有关calloc的信息时,我在source code创建了

char *malloc();

在calloc函数中。

它是否将void * malloc(size_t)强制转换为返回char *?

的函数指针

这个语法不能为我编译。

2 个答案:

答案 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 在其他函数中包含函数声明,但它很少是一个特别好的主意。