0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用C语言实现函数模板

学益得智能硬件 来源:学益得智能硬件 2024-11-09 11:38 次阅读

C语言能不能实现一个通用的函数,既能完成整数的相加,又能完成浮点数的相加?

放在C语言里面,确实比较困难。

我们先来看看C++的解决方案。

#include 


template 
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 关键字。

#include 


int 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

    文章

    7596

    浏览量

    135957
  • 函数
    +关注

    关注

    3

    文章

    4290

    浏览量

    62346
  • C++
    C++
    +关注

    关注

    21

    文章

    2102

    浏览量

    73460

原文标题:C语言实现函数模板

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何用C语言实现面向对象编程

    、组合、多态等面向对象的功能,但C语言有struct和函数指针。我们可以用struct中的数据和函数指针,以此来模拟对象和类的行为。所以在正式开始设计模式前,先看看如何用
    发表于 07-12 07:24

    C语言实现的泛型函数swap()

    C语言实现的泛型函数swap():交换两个变量中的数据.
    发表于 01-20 07:10

    C语言实现DES算法

    C语言实现DES算法 本DES算法,使用了效率很高的C完成。目前,国内知名企业的POS终端中,单DES算法,均是采用这个函数完成。函数
    发表于 01-16 10:09 3258次阅读

    DSP算法的c语言实现

    DSP算法的c语言实现,又需要的朋友下来看看。
    发表于 05-09 10:59 0次下载

    转载一篇MSP430中断c语言函数模板

    转载一篇MSP430中断c语言函数模板包括了基本模块的所有中断模板,感兴趣的小伙伴们可以看看。
    发表于 07-26 11:11 3次下载

    C语言实现数字滤波

    C语言实现数字滤波 。对数值进行精度调整,下面给出几种常用的数字滤波方法的C语言函数,这些函数
    发表于 07-26 15:44 10次下载

    PID控制算法的C语言实现(完整版)

    PID控制算法的C语言实现一 PID算法原理
    发表于 11-05 15:45 0次下载

    C++语言实现火车排序功能

    C++语言实现火车排序功能
    发表于 01-05 11:27 2次下载

    4个重要算法C语言实现源代码

    4个重要算法C语言实现源代码
    发表于 06-10 08:00 12次下载

    C语言实用教程之函数的详细资料说明

    本文档详细介绍的是C语言实用教程之函数的详细资料说明主要内容包括了:1程序设计的艺术性,2函数的定义与使用,3函数的作用域和存储类型,4.预
    发表于 02-26 14:43 3次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言实</b>用教程之<b class='flag-5'>函数</b>的详细资料说明

    使用C语言实现图书馆管理系统的源代码和函数及软件等资料合集

    本文档的主要内容详细介绍的是使用C语言实现图书馆管理系统的源代码和函数及软件等资料合集
    发表于 03-03 08:00 9次下载
    使用<b class='flag-5'>C</b><b class='flag-5'>语言实现</b>图书馆管理系统的源代码和<b class='flag-5'>函数</b>及软件等资料合集

    C++之函数模板的概念及意义

    一、函数模板的引出:1、c++中有几种交换变量的方法:(1)定义宏代码块(2)定义函数代码版本一:#include <iostream>#include <string>using namespace
    的头像 发表于 12-24 15:58 828次阅读

    累加校验和C语言实现

    累加校验和C语言实现
    发表于 11-29 18:06 10次下载
    累加校验和<b class='flag-5'>C</b><b class='flag-5'>语言实现</b>

    怎么用C语言实现多态

    这里我想主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,我们再联想下,C
    的头像 发表于 10-12 09:12 1991次阅读

    使用C语言实现的CRC计算单元的例子

    使用C语言实现的CRC计算单元的例子
    的头像 发表于 05-16 16:16 830次阅读