【发布时间】:2010-12-26 08:58:48
【问题描述】:
来自 OO(C#、Java、Scala) 我非常重视代码重用和类型安全的原则。上述语言中的类型参数可以完成这项工作并启用类型安全且不会“浪费”代码的通用数据结构。
当我陷入 C 中时,我意识到我必须做出妥协,我希望它是正确的。要么我的数据结构在每个节点/元素中都有一个 void * 并且我失去了类型安全性,要么我必须为我想要使用它们的每种类型重新编写我的结构和代码。
代码的复杂性是一个明显的因素:遍历数组或链表是微不足道的,将*next 添加到结构中也不需要额外的努力;在这些情况下,不要尝试和重用结构和代码是有意义的。但对于更复杂的结构,答案就不那么明显了。
还有模块化和可测试性:将类型及其操作从使用该结构的代码中分离出来,使测试变得更容易。反之亦然:在一个结构上测试一些代码的迭代,同时它试图做其他事情会变得混乱。
那么你的建议是什么? void * 和重用或类型安全和重复代码?有什么一般原则吗?当它不适合时,我是否试图强制 OO 进入程序?
编辑:请不要推荐C++,我的问题是关于C的!
【问题讨论】:
-
嘘你,尼尔。 C 是与 C++ 不同的语言。在这个特定的时间,C++ 可能比 C 更容易让 OP 学习,但这并不会使 C 成为一种糟糕的语言,不会使这个问题的有效性降低,也不会使辩论的信息量减少。这只是一个不回答的问题,扼杀了一个讨论 C 语言优缺点的有趣机会。
-
我差点说“请不要推荐 C++,因为这不是问题所在”...
-
我绝不建议 C 是一种糟糕的语言。但是,如果 OP 可以选择其中任何一个,那么显而易见的选择是 C++,即使他只想编写程序代码。我同意这是一个非答案,这正是我发表评论的原因。
-
感谢您的评论!不,这必须是 C。另外,我要做的对 C 来说绝不是不寻常的。
标签: c generics void void-pointers