prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.7

Q为什么有些代码会仔细地将malloc返回的值转换为正在分配的指针类型?


A在 ANSI/ISO 标准 C 引入void *通用指针类型之前,通常需要进行这些转换以消除在不兼容的指针类型之间赋值时产生的警告(并可能促成转换)。

在 ANSI/ISO 标准 C 下,这些转换不再是必需的。也可以认为现在应该不鼓励使用它们;参见问题 7.7b。此外,可以认为明确、低风险的隐式转换(例如 C 始终在整数和浮点类型之间执行的转换)是一种特性。

另一方面,有些程序员更喜欢使每个转换都显式化,以表明他们已经考虑了每种情况,并精确地决定了应该发生什么(另见问题 17.5)。此外,这些转换通常出现在出于某种原因希望与 C++ 兼容的代码中,在 C++ 中,从void *是必需的。

(顺便说一句,K&R2 第 6.5 和 7.8.5 节中暗示需要这些转换的说法是“过于热情”的。)

在某种程度上,您是否使用这些转换是风格问题;参见第 17 节。

附加链接:Mark Brader 的进一步解释

参考文献:H&S 第 16.1 节,第 386-387 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管