千家信息网

C语言中如何实现泛型编程

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天小编给大家分享一下C语言中如何实现泛型编程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
千家信息网最后更新 2026年11月02日C语言中如何实现泛型编程

今天小编给大家分享一下C语言中如何实现泛型编程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

泛型编程(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。C++支持泛型编程,也就是模板,比如:

运行结果:

1 + 2 = 3 1.2 + 2.3 = 3.5

从上面的结果可以看到,对于调用add函数,如果传入的是整型,则按照整型加法计算,如果是浮点数,则按照浮点数进行加法计算。也就是说,add函数没有针对特定类型(泛型)。

你同样可以使用重载实现上面的功能,但是存在大量重复代码。

C语言支持泛型编程吗?

很遗憾,C语言本身不支持真正意义上的泛型编程,但是却在一定程度上可以"实现泛型编程"。

_Generic关键字

_Generic是C11的关键字,通过该关键字可以有一个泛型表达式:

_Generic((value). int:"int", float:"float",char*:"char*",default:"other type")

什么意思呢?如果value是int类型,那么表达式的值就是"int",其他的以此类推。看起来是不是和switch语句有点类似呢?

根据这个示例,我们来实现一个功能,打印变量或常量到底是什么类型:

这里为了方便使用,我们通过define关键字,将泛型表达式简化。

运行结果:

1 + 2 type: int 1/3 type: int 2/3 type: float                                                         xxx type: char*

可以看到通过TYPE就可以获得表达式的结果类型,这对初学者来说,可真是福音了。

泛型算法

既然C语言有_Generic关键字了,那么我们尝试实现开头C++示例代码中的加法。看过上面的例子后,相信你已经会了:

观察上面的代码,我们注意到:

  • 在这里,我们需要定义两种类型的加法(实际上,通过C++的模板,由编译器帮我们完成了这件事),由于C语言中并不支持重载,因此两个加法的函数名不一样。

  • 由于涉及参数有两个,在做类型判断时,如果两个参数不一致,可能仍然存在编译问题

  • 调用者无需区分被加对象是什么类型,都可以统一使用ADD

C99的tgmath.h

前面说到,_Generic关键字在C11中才有,那么C99怎么办呢?实际上,tgmath.h中提供了一些泛型类型宏,如果math.h的函数中定义了float,double和long double版本,tgmath就会提供一个泛型类型宏。效果和前面的例子一样,举个例子:

编译运行结果:

2.000000 1.200000

但是不得不说,tgmath中提供的泛型宏也是有限的。

void *指针

众所周知,C语言中void *指针是一种无类型指针,从这点看,也可以算是泛型指针了。而它的使用在C语言中是非常常见的,举例来说,快速排序接口的函数声明是这样的:

#include  void qsort(void *base, size_t nmemb, size_t size,                   int (*compar)(const void *, const void *));

库函数qsort实际上就是泛型排序算法了,它可以针对任何类型的数据进行排序。当然有一个前提,就是你需要按照它的协议,实现一个compar函数,用于比较大小。

以上就是"C语言中如何实现泛型编程"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

类型 语言 编程 函数 关键 关键字 加法 结果 面的 代码 就是 指针 知识 篇文章 表达式 支持 两个 例子 参数 实际 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 广东万易互联网科技有限公司惠州分公司 科技互联网产品 互联网科技有限公司经营范围 科技企业和互联网企业 艾特科技互联网 未来的互联网科技 狮子座互联网科技有限公司 银优互联网科技有限公司 广州善班互联网科技 科技类的互联网平台 汉立互联网科技有限公司联系电话 青岛科技大学互联网大赛研究生 互联网科技公司有风险吗 996高科技互联网公司 互联网新科技动漫ppt素材 济南有互联网科技公司吗 互联网科技圈年度人物 信承诺互联网科技有限公司 福仕德教育科技互联网 金融科技还是互联网 北京大学互联网科技怎么样 哈尔滨屹滨互联网科技有限公司 互联网科技创新的路径 容联科技互联网电商 中国互联网公司的科技投入 科技互联网经济论坛 安徽零酒互联网科技有限公司 广西泛欧互联网科技有限公司 广东猫王互联网科技有限公司电话
0