Joe*_*Joe 16 c generics void void-pointers
来自OO(C#,Java,Scala),我非常重视代码重用和类型安全的原则.上述语言中的类型参数可以完成这项工作并启用通用数据结构,这些结构既是类型安全的,也不会"浪费"代码.
当我陷入C时,我意识到我必须做出妥协,我希望它是正确的.我的数据结构void *在每个节点/元素中都有一个,我失去了类型安全性,或者我必须为我想要使用它们的每种类型重新编写我的结构和代码.
代码的复杂性是一个显而易见的因素:遍历数组或链接列表是微不足道的,并且添加*next一个结构不是额外的努力; 在这些情况下,不尝试重用结构和代码是有道理的.但对于更复杂的结构,答案并不那么明显.
还有模块化和可测试性:将类型及其操作与使用该结构的代码分离,使测试更容易.反之亦然:在一个结构上测试某些代码的迭代,同时它试图做其他事情变得混乱.
那么你的建议是什么?void *和重用或类型安全和重复的代码?有没有一般原则?当我不适合时,我是否试图强迫OO进行程序化?
编辑:请不要推荐C++,我的问题是关于C!
我认为你必须在两者之间取得平衡,正如你的建议.如果代码只有几行而且微不足道,我会复制它但如果它更复杂,我会考虑使用void*以避免在几个地方进行任何潜在的bug修复和维护,并减少代码大小.
如果你看一下C运行时库,可以使用几个"通用"函数void*,一个常见的例子是使用排序qsort.为您要排序的每种类型复制此代码会很疯狂.
使用 void 指针没有任何问题。当将它们分配给指针类型的变量时,您甚至不必对它们进行强制转换,因为转换是在内部完成的。可能值得一看:http ://www.cpax.org.uk/prg/writings/casting.php