用C语言能不能实现一个通用的函数,既能完成整数的相加,又能完成浮点数的相加?
放在C语言里面,确实比较困难。
我们先来看看C++的解决方案。
#includetemplate T add(T x, T y) { return x + y; } int main() { std::cout << add (1, 2) << std::endl; //显式调用 std::cout << add(1.1, 2.2) << std::endl; //隐式调用 return 0; }
C++有个重要的概念叫做模板,所谓模板,就是通用的意思。
不管是整数的相加,还是浮点数的相加,代码都是一样的,唯一的区别就是类型,参数的类型以及返回值的类型。
那就干脆用一种通用的类型来代替,这个类型暂且就叫 T。
这样的代码如果直接拿来编译,编译器肯定会提示 T 这种类型不能识别,毕竟它不是标准的类型。
所以还需要在上面加一行代码,专门告诉编译器,T 是一种类型。
调用函数的时候,可以显示指定类型,也可以让编译器自己去分析,这就是 C++ 中的函数模板。
单从功能上来说,确实给用户提供了极大的方便。
再回到C语言上,C语言并没有函数模板的概念,唯一能接近函数模板的方式,可能就是使用 _Generic 关键字。
#includeint add_int(int x, int y) { return x + y; } double add_double(double x, double y) { return x + y; } #define ADD(X, Y) _Generic((X), int : add_int(X, Y), double : add_double(X, Y)) int main() { printf("%d ", ADD(1, 2)); printf("%lf ", ADD(1.1, 2.2)); return 0; }
‑Generic 关键字可以判断参数 x 的类型,根据类型去匹配相应的函数,如果不看这些代码,从使用的角度,确实有点函数模板的意思。
-
C语言
+关注
关注
180文章
7597浏览量
136114 -
函数
+关注
关注
3文章
4303浏览量
62408 -
C++
+关注
关注
22文章
2104浏览量
73478
原文标题:C语言实现函数模板
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论