c - 泛型与类型安全?在 C 中使用 void*

标签 c generics void void-pointers

来自 OO(C#、Java、Scala),我非常重视代码重用和类型安全的原则。上述语言中的类型参数可以完成这项工作,并启用既类型安全又不会“浪费”代码的通用数据结构。

当我陷入 C 语言时,我意识到我必须做出妥协,而且我希望它是正确的。要么我的数据结构在每个节点/元素中都有一个 void * 并且我失去了类型安全性,要么我必须为我想使用它们的每种类型重写我的结构和代码。

代码的复杂性是一个明显的因素:遍历数组或链表是微不足道的,向结构添加 *next 也不是额外的工作;在这些情况下,不尝试重用结构和代码是有意义的。但对于更复杂的结构,答案并不那么明显。

还有模块化和可测试性:将类型及其操作与使用该结构的代码分开可以使测试更容易。反之亦然:在结构上测试某些代码的迭代,同时尝试做其他事情会变得困惑。

那么你有什么建议呢? void * 和重用或类型安全和重复代码?有什么一般原则吗?当它不适合时,我是否试图将 OO 强制到程序上?

编辑:请不要推荐C++,我的问题是关于C的!

最佳答案

我会说使用 void * 这样您就可以重新使用代码。重新实现例如更多工作一个链接列表,而不是确保您正确获取/设置列表中的数据。

尽可能多地从 glib 中获取提示尽可能地,我发现它们的数据结构非常好用且易于使用,并且几乎没有因为类型安全性的丧失而遇到麻烦。

关于c - 泛型与类型安全?在 C 中使用 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899906/

相关文章:

java - 在递归通用数据结构中对对象进行排序

c - void函数(C语言)

c - 如何打印空指针数组指向的值

c - 使用 Matlab Coder 生成的算法进行生产

c - fileno() 不可用?

C++ 通用表数据结构

java - 编写静态 void 方法 - "cannot find symbol"编译错误

c - 在 Broken pipe 上发送行为

c - 我如何解释 'main()' ?

generics - 带有通用的 vhdl 中的简单测试台