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

在寻找有关calloc的信息时,我创建了源代码:

char *malloc();

在calloc函数中。

它是否将void * malloc(size_t)转换为返回char *的函数指针?

这个语法不适合我编译。


在过去,在ANSI C提供void *作为通用指针类型之前, char *被用于此目的。

代码来自版本7 Unix的源代码,它于1979年发布(在ANSI C之前)。

这就是为什么需要在旧的ANSI代码中投射malloc()的返回值。

参考:C FAQ


这来自一些非常古老的源代码。 您正在查看1979年发布的UNIX版本7中的代码。此后,C语言发生了很大变化。

这不是演员; 这是一个函数声明。 一个强制类型包含一个带括号的类型名称,后跟一个表达式,如(int)foo

此外,这是一种旧式函数声明,它是一种不指定参数类型的非原型函数。 (尽管如此,它仍然是有效的语法。)

它声明malloc是一个返回char*类型结果的函数。 (它没有定义malloc函数;必须在其他地方完成。)

在现代C中(自1989年以来), malloc返回void*类型的结果,并且具有单个size_t类型的参数,因此声明为:

void *malloc(size_t);

但该声明由标准<stdlib.h>头提供,因此不需要自己提供声明。

在其他函数中使用函数声明是合法的,但它很少是一个特别好的想法。

链接地址: http://www.djcxy.com/p/28477.html

上一篇: Function Pointer cast at declaration

下一篇: there is no heap in c?