我正在处理一个老的代码库,几乎所有的free()函数调用都在其参数上使用了强制类型转换。例如:
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
每个指针都是对应(匹配)类型的。我认为根本没有必要这样做。这是非常古老的代码,所以我想知道它是否是K&R(Kernighan和Ritchie)的一种方法。如果是这样,我实际上希望支持可能需要这些内容的旧编译器,因此我不想删除它们。
有使用这些强制转换的技术原因吗?我甚至没有看到使用它们的实用理由。在释放数据类型之前提醒自己数据类型的意义是什么?
编辑:这个问题不是另一个问题的副本。如果关闭投票者阅读了所有答案,他们会发现另一个问题是这个问题的特殊情况,这一点我认为是显而易见的。
后记:我将选定标记给予给出仍然需要执行此操作的答案;但是,关于它是ANSI C之前的习惯(至少是部分程序员之间的习惯)的答案似乎是我使用的原因。如果有两个选定标记可以提供,它们都会得到一个。许多人在这里提出了很好的观点。感谢您的贡献。
void*
这个概念的,只有char*
。因此,如果你的考古发现代码将参数转换为free(),那么它必须要么来自那个时期,要么是由那个时代的生物编写的。虽然我找不到这方面的资料,但我还是选择保持沉默不作回答。 - Lundin