C编程语言中有模板吗?

use*_*022 7 c templates

我正在用C编写链表实现,并希望使用与C++ 模板等效的语言功能来使我的工作更轻松.

这样的功能是否存在?

hyd*_*yde 6

C没有像C++这样的模板,尽管你可以用"聪明"(或WTFey,取决于你如何看待它)来实现类似的东西#define.

但是,请看一下GLib如何为单链表双链表执行此操作.


NIA*_*NIA 5

模板是 C++ 的特性,但是如果您想要单链表或双链表的类型无关实现,可以借助宏来实现,或者您可以简单地void*在结构中存储指针。

当然,互联网上有很多这样的实现。@MohamedKALLEL@hyde已经给出了来自 Linux 内核和 GLib 的示例,我只想添加一个关于漂亮的小库uthash 的注释

它在 C 中实现了一个哈希表,但它也有一个utlist.h,它完全在宏上实现单链和双链(甚至循环)列表。也就是说,您可以简单地获取此文件,将其包含在内,然后按原样使用这些宏,或根据需要对其进行修改。同样不错的是,您可以将任何数据结构与它一起使用:它只需要有next指针(并且prev,在双向链接的情况下)。

Ps 但是在使用宏时要记住:能力越大责任越大。宏功能强大,但可能变得极其不安全和不可读。谨防!


MOH*_*MED 3

是的,有list.h。这是一个循环链表:

以下链接包含如何使用它的示例。

包含list.h与循环链表管理相关的所有函数,如定义、添加头部、添加尾部、删除、foreach函数浏览循环链表...

  • @unwind:我知道list.h在linux内核中使用。但在我给出的 list.h 答案中的链接是 list.h 的另一个发行版,它在 linux 的用户空间中工作并且是可移植的。我在我开发的所有用户空间应用程序中使用它并且运行良好。 (2认同)