【发布时间】:2020-06-22 20:08:48
【问题描述】:
我正在阅读一本使用 C 语言的书(Programming with POSIX Threads,Butenhof,1997 年),我遇到了以下行:
(void)free(data);
这里,data 只是一个指向已分配结构的指针,
data = malloc(sizeof(my_struct_t));
为什么free 的结果会被强制转换为void?
根据我对 C 的理解,这似乎没有意义,原因有两个:
- free 函数已经返回
void - 代码没有使用返回值(甚至没有分配给变量)
这本书写于 1997 年。这是某种遗产吗?
作者提到这些示例是在 Digital Unix 4.0d 上运行的,但如果你不打算使用该结果,我仍然无法想象有理由转换函数的结果。
【问题讨论】:
-
一些可能的解释可以在这里找到:stackoverflow.com/questions/689677/…
-
出于好奇,您的 C 书出版日期是什么时候? (是哪本书?)如果是在 1995 年之前,那可能有一些理由——标准 C 编译器在那之前并不普遍。如果它在那之后出版并且仍然包含演员表(并且没有解释为什么),请担心它教给你的其他坏习惯。买一本更新的书!
-
@JonathanLeffler 正如我在原帖中提到的,这本书出版于 1997 年,使用的是 UNIX 4.0d。这本书是 David R. Butenhof 的“使用 POSIX 线程编程”。到目前为止,它提供了非常丰富的信息,并且是由 POSIX 线程标准的原始贡献者之一编写的。
-
上周我一直在使用我的副本——是的,它仍然有用。它写在“无处不在的标准 C”的风口浪尖上(我说的是“大约 1995 年”)。 'UNIX 4.0d' 听起来像 Digital UNIX — Butenhof 工作的地方,前言中确实提到了它。将
free()上的演员视为书中的怪事,您无需效仿。很久以前它是半相关的,但它不再相关了。
标签: c casting free void legacy-code