版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
title: 随笔 - C 语言的泛型 categories:
简要介绍 C11 之前和之后的泛型写法
<!-- more -->利用宏实现
{% icodeweb blog lang:c draft-002/1.c %}
其中(void)(&_min_1 == &_min_2);
利用了不同类型指针做逻辑比较在编译过程会报错来保证两参数类型相同
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:
{% icodeweb blog lang:c draft-002/2.c %}
输出:
intabs:12
floatabs:12.040000
doubleabs:13.098760
b=0,c=1
a=10,b=1,c=1
简要讲讲代码的含义
_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++