函数指针在声明时强制转换
在寻找有关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