随笔 - C 语言的泛型
简要介绍 C11 之前和之后的泛型写法
C11 之前
利用宏实现
1 |
其中 (void)(&_min_1 == &_min_2);
利用了不同类型指针做逻辑比较在编译过程会报错来保证两参数类型相同
C11 之后
C11 中添加了_Generic
关键字,使得编写泛型函数更方便了
用法 1:
generic-selection:
_Generic ( assignment-expression , generic-assoc-list )
generic-assoc-list:
generic-association
generic-assoc-list , generic-association
generic-association:
type-name : assignment-expression
default
: assignment-expression
例如 2:
1 |
|
输出:
1 | intabs:12 |
简要讲讲代码的含义
_Generic(a + 0.1f, int : b, float : c, default : b)++;
a 为 int
, a + 0.1f
为 float
, 所以_Generic
执行 float
对应的操作,即返回 c
, 最终该语句为 c++
_Generic(a += 1.1f, int : b, float : c, default : b)++;
a 为 int
, a += 1.1f
不改变 a
的值 , _Generic
判断 a
的类型,执行 int
对应的操作,即返回 b
, 最终该语句为 b++