繁体   English   中英

在声明时强制转换功能指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM