C语言的泛型函数,可以模拟C++的模版效果
C++模版对于写一些通用代码很好用,但是C语言却没有模版,但是也可以模拟出来,不过有点得不偿失,但是可以让代码具有比较的移植性,写好了就可以兼容你自己想要的。
那么这就不得不提到
C语言中的_Generic
关键字和宏定义
_Generic
关键字:
_Generic
是 C11 标准引入的一种泛型选择机制。- 它根据传入表达式的类型选择一个合适的分支。
就是这个宏可以根据你产数的数据类型选择调用对应的函数。
_Generic((x), int: int_processor, float: float_processor)
(x)
是需要判断类型的表达式。int: int_processor
表示如果x
的类型是int
,则选择int_processor
。float: float_processor
表示如果x
的类型是float
,则选择float_processor
。_Generic
的返回值是一个函数指针或具体的值,具体取决于分支定义。
-
调用对应的处理函数:
_Generic
的结果是一个函数名(如int_processor
或float_processor
)。- 宏展开后,代码会变成:
int_processor(x) // 如果 x 是 int 类型
float_processor(x) // 如果 x 是 float 类型
- 也就是说,
_Generic
根据x
的类型,动态选择对应的处理函数,并直接调用。
我们需要逐一写出对应的xxxx_processor(x)函数的具体实现,然后_Generic(x)这个就会调用对应的函数