【发布时间】:2016-03-05 08:24:51
【问题描述】:
我正在处理旧代码库,几乎每次调用 free() 都会对其参数进行强制转换。例如,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
其中每个指针都是对应的(和匹配的)类型。我认为这样做毫无意义。这是非常古老的代码,所以我想知道它是否是 K&R 的东西。如果是这样,我实际上希望支持可能需要这个的旧编译器,所以我不想删除它们。
使用这些演员表是否有技术原因?我什至看不到使用它们的实用理由。在释放数据类型之前提醒自己有什么意义?
编辑:这个问题不是另一个问题的重复。另一个问题是这个问题的一个特例,我认为如果接近的选民会阅读所有答案,这是显而易见的。
Colophon:我给“const answer”打勾是因为这是可能需要这样做的真正原因;但是,关于它是 ANSI C 之前的自定义(至少在某些程序员中)的答案似乎是在我的案例中使用它的原因。这里有很多人的很多优点。感谢您的贡献。
【问题讨论】:
-
“在释放它之前提醒我们自己的数据类型有什么意义?”也许想知道将释放多少内存?
-
@Codor 编译器不执行释放,操作系统执行。
-
@m0skit0 "也许知道将释放多少内存?" 不必知道要释放多少类型。仅仅因为这个原因,演员就是糟糕的编码。
-
@m0skit0 为了可读性而进行强制转换总是不好的编码,因为强制转换会改变类型的解释方式,并且可能会隐藏严重的错误。当需要可读性时,cmets 更好。
-
在恐龙在地球上行走,写编程书籍的古代,我相信在标准C语言中没有
void*,而只有char*。因此,如果您的考古发现揭示了将参数转换为 free() 的代码,我相信它必须要么来自那个时期,要么是那个时期的生物编写的。不过我找不到任何来源,所以我不会回答。