C语言泛型编程如何实现


本篇内容介绍了“C语言泛型编程如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!泛型编程(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。C++支持泛型编程,也就是模板,比如:运行结果:从上面的结果可以看到,对于调用add函数,如果免费云主机域名传入的是整型,则按照整型加法计算,如果是浮点数,则按照浮点数进行加法计算。也就是说,add函数没有针对特定类型(泛型)。你同样可以使用重载实现上面的功能,但是存在大量重复代码。C语言支持泛型编程吗?很遗憾,C语言本身不支持真正意义上的泛型编程,但是却在一定程度上可以“实现泛型编程”。_Generic关键字_Generic是C11的关键字,通过该关键字可以有一个泛型表达式:什么意思呢?如果value是int类型,那么表达式的值就是“int”,其他的以此类推。看起来是不是和switch语句有点类似呢?根据这个示例,我们来实现一个功能,打印变量或常量到底是什么类型:这里为了方便使用,我们通过define关键字,将泛型表达式简化。运行结果:可以看到通过TYPE就可以获得表达式的结果类型,这对初学者来说,可真是福音了。泛型算法既然C语言有_Generic关键字了,那么我们尝试实现开头C++示例代码中的加法。看过上面的例子后,相信你已经会了:观察上面的代码,我们注意到:在这里,我们需要定义两种类型的加法(实际上,通过C++的模板,由编译器帮我们完成了这件事),由于C语言中并不支持重载,因此两个加法的函数名不一样。由于涉及参数有两个,在做类型判断时,如果两个参数不一致,可能仍然存在编译问题调用者无需区分被加对象是什么类型,都可以统一使用ADDC99的tgmath.h前面说到,_Generic关键字在C11中才有,那么C99怎么办呢?实际上,tgmath.h中提供了一些泛型类型宏,如果math.h的函数中定义了float,double和long double版本,tgmath就会提供一个泛型类型宏。效果和前面的例子一样,举个例子:编译运行结果:但是不得不说,tgmath中提供的泛型宏也是有限的。void *指针众所周知,C语言中void *指针是一种无类型指针,从这点看,也可以算是泛型指针了。而它的使用在C语言中是非常常见的,举例来说,它的函数声明是这样的:库函数qsort实际上就是泛型排序算法了,它可以针对任何类型的数据进行排序。当然有一个前提,就是你需要按照它的协议,实现一个compar函数,用于比较大小。“C语言泛型编程如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: C语言如何利用软件代替Mutex互斥锁

这篇文章主要介绍“C语言如何利用软件代替Mutex互斥锁”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言如何利用软件代替Mutex互斥锁”文章能帮助大家解决问题。在 Linux 系统中,当多个线程并行执行时,如果需…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/12 18:28
下一篇 02/12 18:30

相关推荐