像这样类似的例子,C语言中还有很多,不过相比于其他语言,如C++中的模板,这种所谓的泛型,确实有些小巫见大巫了。 总结 C语言语法上本身基本不支持泛型编程,但是借助_Generic关键字和一些手段,可以实现泛型编程。
这样使无论传入的参数是指向什么类型的指针,都可以得到指向正确元素的指针,实现泛型编程。函数 memcmp() 原型:int memcmp(void *dest,const void *src,int n),比较两段长度为n首地址分别为 dest、src 的地址空间中的内容。此函数在数组 base 中查找 key 元素,找到则返回它的地址信息,找不到则返回 NULL。
其实早在 1999 年,C 语言便引入了泛型数学运算库作为标准库的组件,头文件为tgmath.h,意为 Type-generic math,即同一个接口可以接受 double、float、long double 等不同类型的对象。 tgmath.h 用宏包装了 math.h 和 complex.h 中的函数,实现了重载效果,然而却引起了相当大的争议。 先看示例代码: #include<t...
让我们通过一个具体的例子来理解如何使用 _Generic 实现泛型编程。 实现getTypeName 函数 假设我们想要实现一个 getTypeName 函数,该函数返回变量 var 的类型名称。可以这样写: #define GET_TYPENAME(var) _Generic((var), \ int: "int", \ char: "char", \ float: "float", \ double: "double", \ cha...
与宏定义结合是不是感觉好多了,甚至有点C++泛型编程的感觉了,但是其实还差点。 进阶玩法 _ Generic标签对应的值,可以是整形,也可以是字符串,当然也可以是函数指针。 我们来看一下下边的这段代码。 代码语言:javascript 复制 voidPrintInt(int x){printf("%d\n",x);}voidPrintDouble(double x){printf("%lf\...
在这个例子中,我们定义了一个名为max()的函数模板,用于返回两个值中的最大值,该函数模板有一个类型参数T,表示需要比较的值的类型。在main()函数中,我们分别传入整型和浮点型参数来测试max()函数,并输出结果。与C++不同,C语言没有类模板和函数模板这些概念,因此难以实现泛型编程。在C语言中,需要手动编写...
可能有很多伙伴不了解泛型编程是什么,之前有伙伴听到过也想了解下,这期视频给大家讲解下,顺便举了例子,它可以怎么做,可以用来做什么。大家喜欢此视频,觉得此视频对伙伴们有帮助的话记得点个赞和关注哦!当然三连是UP最喜欢的,你们的支持才是UP更新的动力!!!, 视频
[C.Sharp] 泛型编程 泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。 例子代码: class Program { static void Main(string[] args) { int obj = 2; Test<int> test = new Test<int>(obj);...
C++中的模板可以将数据类型参数化,从而实现泛型编程,非常灵活和强大。而C语言则不支持模板这一特性。