像这样类似的例子,C语言中还有很多,不过相比于其他语言,如C++中的模板,这种所谓的泛型,确实有些小巫见大巫了。 总结 C语言语法上本身基本不支持泛型编程,但是借助_Generic关键字和一些手段,可以实现泛型编程。
image.png 与宏定义结合是不是感觉好多了,甚至有点C++泛型编程的感觉了,但是其实还差点。 进阶玩法 _ Generic标签对应的值,可以是整形,也可以是字符串,当然也可以是函数指针。 我们来看一下下边的这段代码。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 voidPrintInt(int x){printf("%d\n",x);}voi...
让我们通过一个具体的例子来理解如何使用 _Generic 实现泛型编程。 实现getTypeName 函数 假设我们想要实现一个 getTypeName 函数,该函数返回变量 var 的类型名称。可以这样写: #define GET_TYPENAME(var) _Generic((var), \ int: "int", \ char: "char", \ float: "float", \ double: "double", \ cha...
这样使无论传入的参数是指向什么类型的指针,都可以得到指向正确元素的指针,实现泛型编程。 函数memcmp() 原型:int memcmp(void *dest,const void *src,int n),比较两段长度为n首地址分别为 dest、src 的地址空间中的内容。 此函数在数组 base 中查找 key 元素,找到则返回它的地址信息,找不到则返回 NULL。 ...
提到泛型编程,首先想到的就是重载、模板等方式,那么还有其他方式吗?下面就聊聊 C 语言的“Generic Selection”等泛型机制。 其实早在 1999 年,C 语言便引入了泛型数学运算库作为标准库的组件,头文件为tgmath.h,意为 Type-generic math,即同一个接口可以接受 double、float、long double 等不同类型的对象。
在这个例子中,我们定义了一个名为max()的函数模板,用于返回两个值中的最大值,该函数模板有一个类型参数T,表示需要比较的值的类型。在main()函数中,我们分别传入整型和浮点型参数来测试max()函数,并输出结果。与C++不同,C语言没有类模板和函数模板这些概念,因此难以实现泛型编程。在C语言中,需要手动编写...
C语言泛型编程--抽象数据类型 一、数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int、double、char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array、struct 或union。 那么,什么是数据类型呢?我们可以这样定义:一种数据类型是一些值的集合——通常char类型共...
泛型编程:泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。 利用泛型编程,我们可以写一些通用的函数,以减少代码量,实现代码的通用性,以下简单的举个栗?子 泛型冒泡排序: #include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdbool.h>// bool 类型typedefint(*PFun)(void*,void...