Tag: generics

C中的通用二叉搜索树

我已经实现了二叉搜索树,但我也想让它变得通用。 代码如下: typedef struct treeNode { int data; struct treeNode *left; struct treeNode *right; } treeNode; 和function: treeNode* FindMin(treeNode *node) { if(node==NULL) { /* There is no element in the tree */ return NULL; } if(node->left) /* Go to the left sub tree to find the min element */ return FindMin(node->left); else return node; } […]

通用性与类型安全性? 在C中使用void *

来自OO(C#,Java,Scala),我非常重视代码重用和类型安全的原则。 上述语言中的类型参数可以完成这项工作并启用通用数据结构,这些结构既是类型安全的,也不会“浪费”代码。 当我陷入C时,我意识到我必须做出妥协,我希望它是正确的。 我的数据结构在每个节点/元素中都有一个void * ,我失去了类型安全性,或者我必须为我想要使用它们的每种类型重新编写我的结构和代码。 代码的复杂性是一个显而易见的因素:遍历数组或链表是微不足道的,并且在结构*next添加*next不是额外的努力; 在这些情况下,不尝试重用结构和代码是有意义的。 但对于更复杂的结构,答案并不那么明显。 还有模块化和可测试性:将类型及其操作与使用该结构的代码分离,使测试更容易。 反之亦然:在一个结构上测试一些代码的迭代,而它试图做其他事情变得混乱。 那么你的建议是什么? void *和重用或类型安全和重复的代码? 有没有一般原则? 当我不适合时,我是否试图强迫OO进行程序化? 编辑 :请不要推荐C ++,我的问题是关于C!

C中的通用列表操作函数?

什么是C中的通用列表操作函数? (当我浏览一些材料时,我看到了这一点。) 这个函数和一个可以接受任何元素的函数有什么区别? 它们是一样的吗? 如果它们不相同,我们如何单独实施?