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

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

3天内不再提示

C语言的面向接口编程

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-06-22 09:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

面向接口是啥?

不用慌,其实面向接口编程不是什么新鲜玩意,说得直白点就是函数指针的使用,不过我觉得可以形成一种编程的思想来指导嵌入式程序设计,特别是对于降低代码的耦合还是比较奏效的。

面向接口编程比面向对象要更牛吗?为什么不直接玩面向对象编程呢?

其实bug菌这么多年开发过来,真正把C完完全全用面向对象的方式进行编写是非常少的,像C++中的继承、多态、虚函数等等面向对象特性,如果均用C语言来维护和实现是非常复杂的,并且你还不能保证没有bug。

再说了你写了一堆代码让C的特性更加的像C++,那为什么不直接使用C++呢?难道你觉得那些特性你能用C写得比C++更好?别重复造轮子了。

不过,话说回来,能够在C语言中借鉴一些面向对象的语言特性和思想,确实能够让C代码更加的优雅和灵活,所以今天聊聊面向接口编程,它仅仅只是面向对象的一部分,不过在一般的嵌入式开发中使用性价比还是比较高的。

面向接口编程

话不多说,先上一个面向接口编程的Demo:

参考demo:
  1#include
  2#include
  3
  4/********************************************
  5*Note:共用接口的定义
  6*author:bug菌
  7*******************************************/
  8structInterface{
  9int(*Initial)(void*handle);
 10int(*Send)(void*handle,char*buff,intcount);
 11int(*Recv)(void*handle,char*buff);
 12int(*Destory)(void*handle);
 13};
 14
 15/********************************************
 16*Note:具体类型的定义
 17*author:bug菌
 18*******************************************/
 19typedefstruct_tag_protocolType1{
 20structInterfacebi;//公共通信接口
 21char*CommTypeName;//通信名称
 22//不同通信类型的其他成员......
 23}protocolType1;
 24
 25
 26/********************************************
 27*Note:其中一种报文协议的简单接口实现
 28*author:bug菌
 29*******************************************/
 30voidprotocol_Initial(void*handle)
 31{
 32protocolType1*p=(protocolType1*)handle;
 33p->CommTypeName="protocolType1";//可以通过公共接口传参访问原对象的所有成员
 34
 35printf("%sInitial
",p->CommTypeName);
 36}
 37
 38voidprotocol_Send(void*handle,char*buff,intcount)
 39{
 40protocolType1*p=(protocolType1*)handle;
 41
 42printf("%sSend
",p->CommTypeName);
 43}
 44
 45voidprotocol_Recv(void*handle,char*buff)
 46{
 47protocolType1*p=(protocolType1*)handle;
 48
 49printf("%sRecv
",p->CommTypeName);
 50}
 51
 52voidprotocol_Destory(void*handle)
 53{
 54protocolType1*p=(protocolType1*)handle;
 55
 56printf("%sDestory
",p->CommTypeName);
 57}
 58
 59/********************************************
 60*Note:根据不同的类型,进行接口的初始化
 61*author:bug菌
 62*******************************************/
 63voidInitial(structInterface*pInterface,inttype)
 64{
 65pInterface->Initial=protocol_Initial;
 66
 67pInterface->Send=protocol_Send;
 68
 69pInterface->Recv=protocol_Recv;
 70
 71pInterface->Destory=protocol_Destory;
 72
 73}
 74
 75/********************************************
 76*Note:主题框架基本上不需要修改,这里只是简单示例,你可以更复杂
 77*author:bug菌
 78*******************************************/
 79voidProcess(structInterface*pInterface)
 80{
 81pInterface->Initial(pInterface);
 82
 83pInterface->Send(pInterface,NULL,0);
 84
 85pInterface->Recv(pInterface,NULL);
 86
 87pInterface->Destory(pInterface);
 88
 89}
 90
 91
 92/********************************************
 93*Note:应用程序
 94*author:bug菌
 95*******************************************/
 96intmain(intargc,char*argv[]){
 97
 98protocolType1protocol;
 99
100Initial((structInterface*)&protocol,1);
101
102Process((structInterface*)&protocol);
103
104return0;
105}
运行结果:

2c69be42-f1ca-11ec-ba43-dac502259ad0.png

分析一下:
对于一名合格的程序员,代码show出来,本文就没有写下去的必要了,不过为了全文的整体性,还是啰嗦几句。其实面向接口编程所采用就是面向对象编程中的继承,只不过它把所有的公共接口全部抽象出来供框架程序进行调用。这样当我们需要增加其他类型的对象处理时,可以通过构造并替换不同的接口函数来进行处理,从而使得整体程序改动最小。凡是一种复用的架构都会牺牲一定的性能,不过也会增加程序的可维护性,降低程序的耦合度,如果你开发的项目并不是很复杂, 也确定了以后接口不会有新的变化,其实不使用接口也是OK的。对于自动测试程序框架,接口的预留是非常重要的,可以通过虚拟接口来测试业务逻辑,能够模拟更多实际环境下不同的工况来进行测试。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144668
  • 编程
    +关注

    关注

    90

    文章

    3709

    浏览量

    96785

原文标题:C语言实现面向接口编程

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CC++之间的联系

    ,后来才逐渐演变为一种成熟的面向对象编程语言。 总之,C语言C++虽然有很多共同之处,但在
    发表于 12-11 06:51

    C语言C++之间的区别是什么

    区别 1、面向对象编程 (OOP): C语言是一种面向过程的语言,它强调的是通过函数将任务分解
    发表于 12-11 06:23

    单片机C语言编程的心得

    写这个8*8按键程序的过程中,不管是在自己写还是参考别人程序的过程中,发现自己对C语言有些基本知识点和编程规范有很多不懂的地方,有些是自己以前的编程习惯不好,有些就是基础知识不扎实的表
    发表于 12-08 07:44

    如何调试和编程CW32F030C8T7?支持哪些调试工具和编程语言

    了解如何调试和编程CW32F030C8T7是开发过程中的重要环节。它支持哪些调试工具(如JTAG、串口调试等)和编程语言(如C
    发表于 12-05 06:48

    为什么单片机还在用C语言编程

    说起单片机我们就会想到C语言,单片机为什么还在用C语言编程?现在有很多很好用的高级语言,如VC、
    发表于 11-28 07:37

    C语言编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用C语言的灵活性
    发表于 11-27 06:46

    C语言和单片机C语言有什么差异

    区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。 3、单片机c语言编程是基于C
    发表于 11-14 07:55

    单片机c语言编程实例大全

    单片机c语言编程实例大全_18
    发表于 04-30 16:11 6次下载

    深入理解C语言C语言循环控制

    C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C
    的头像 发表于 04-29 18:49 1749次阅读
    深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:<b class='flag-5'>C</b><b class='flag-5'>语言</b>循环控制

    如何在 树莓派 上编写和运行 C 语言程序?

    在本教程中,我将讨论C编程语言是什么,C编程的用途,以及如何在RaspberryPi上编写和运行C
    的头像 发表于 03-25 09:28 943次阅读
    如何在 树莓派 上编写和运行 <b class='flag-5'>C</b> <b class='flag-5'>语言</b>程序?

    数字电路编程语言介绍

    数字电路编程语言是专门为描述和模拟数字电路而设计的编程语言。它们通常具有以下特点: 硬件描述语言(HDL) :大多数数字电路
    的头像 发表于 01-24 09:39 1406次阅读

    EE-33:用C语言对ADSP-21xx定时器进行编程

    电子发烧友网站提供《EE-33:用C语言对ADSP-21xx定时器进行编程.pdf》资料免费下载
    发表于 01-15 15:46 0次下载
    EE-33:用<b class='flag-5'>C</b><b class='flag-5'>语言</b>对ADSP-21xx定时器进行<b class='flag-5'>编程</b>

    gitee 支持的编程语言有哪些

    Gitee 支持的常见编程语言: Python :一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。 Java :一种面向对象
    的头像 发表于 01-06 09:50 1114次阅读

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    语言调用,成为开发者和厂商面临的重要挑战。为解决这一痛点,一款名为AKI (Alpha Kernel Interacting)的开源三方库应运而生,它通过高效封装跨语言调用接口,帮助开发者将
    发表于 01-02 17:08

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Trit
    的头像 发表于 12-24 17:33 1490次阅读