c-在声明处强制转换的函数指针



在查找有关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>标头提供的,因此不需要自己提供声明。

在其他函数中包含函数声明是合法的,但这很少是一个特别好的主意。

相关内容

  • 没有找到相关文章