[英]Function Pointer cast at declaration
在寻找有关calloc的信息时,我在源代码中创建了:
char *malloc();
在calloc函数中。
它是否将void * malloc(size_t)转换为返回char *的函数指针?
此语法不适合我编译。
在过去,在ANSI C提供void *
作为通用指针类型之前, char *
用于此目的。
该代码来自Unix 7版 ,该版本于1979年发布(在ANSI C之前)。
这就是为什么必须在旧的ANSI前代码中malloc()
的返回值 。
参考: C常见问题解答
这来自一些非常古老的源代码。 您正在查看1979年发布的UNIX Version 7中的代码。从那时起C语言发生了重大变化。
这不是演员; 这是一个功能声明。 强制转换由带括号的类型名称后跟表达式组成,例如(int)foo
。
此外,它是一个旧式函数声明,一个非原型,不指定参数的类型。 (不过,它仍然是有效的语法。)
它声明malloc
是一个返回char*
类型结果的函数。 (它没有定义 malloc
函数;必须在其他地方完成。)
在现代C(自1989年以来)中, malloc
返回void*
类型的结果并且具有size_t
类型的单个参数,因此声明将是:
void *malloc(size_t);
但该声明由标准的<stdlib.h>
标头提供,因此不需要自己提供声明。
在其他函数中包含函数声明是合法的 ,但它很少是一个特别好的主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.