【发布时间】:2013-06-20 03:17:16
【问题描述】:
比 CI 了解更多的 C++ 想知道是否有人可以解释为什么 malloc() 总是返回类型为 void 的指针,而不是 malloc 已通过某种机制实现,该机制允许它返回用户传入的类型的指针?不断地显式地将返回的 void 指针转换为您想要的类型似乎有点“hacky”。
【问题讨论】:
-
用户传入的类型?你是说
size_t? -
C 中没有泛型,而且 malloc 不必是宏。因此,您别无选择,只能将 malloc 返回类型定义为 void* 。
-
请注意,您不必(根据包括我在内的一些人的说法,不应该)cast the return value of malloc。在 C 中,存在从
void *到任何指针类型的隐式转换。 -
@StilesCrisis,什么是 C++ 模式? C 和 C++ 是不同的语言,用一种语言编写的代码通常对于另一种来说不是很好的代码。特别是,C++ 代码不应该直接使用
malloc,而是直接使用new。所以在 C++ 中并没有真正的需要。 -
@JensGustedt 将 C 编译为 C++ 有时确实会发生。使用某些工具集,将所有内容编译为 C++ 比选择性地将某些文件编译为 C 更容易。有时您甚至没有 C 编译器。
#ifdef __cplusplus extern "C" { #endif出现在全世界的 C 文件中是有原因的。
标签: c linux pointers memory-management malloc