91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C語言的面向接口編程

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-22 09:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

面向接口是啥?

不用慌,其實面向接口編程不是什么新鮮玩意,說得直白點就是函數(shù)指針的使用,不過我覺得可以形成一種編程的思想來指導嵌入式程序設計,特別是對于降低代碼的耦合還是比較奏效的。

面向接口編程比面向?qū)ο笠幔繛槭裁床恢苯油婷嫦驅(qū)ο缶幊棠兀?/span>

其實bug菌這么多年開發(fā)過來,真正把C完完全全用面向?qū)ο蟮姆绞竭M行編寫是非常少的,像C++中的繼承、多態(tài)、虛函數(shù)等等面向?qū)ο筇匦?/span>,如果均用C語言來維護和實現(xiàn)是非常復雜的,并且你還不能保證沒有bug。

再說了你寫了一堆代碼讓C的特性更加的像C++,那為什么不直接使用C++呢?難道你覺得那些特性你能用C寫得比C++更好?別重復造輪子了。

不過,話說回來,能夠在C語言中借鑒一些面向?qū)ο蟮恼Z言特性和思想,確實能夠讓C代碼更加的優(yōu)雅和靈活,所以今天聊聊面向接口編程,它僅僅只是面向?qū)ο蟮囊徊糠?,不過在一般的嵌入式開發(fā)中使用性價比還是比較高的。

面向接口編程

話不多說,先上一個面向接口編程的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:其中一種報文協(xié)議的簡單接口實現(xiàn)
 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:根據(jù)不同的類型,進行接口的初始化
 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}
運行結(jié)果:

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

分析一下:
對于一名合格的程序員,代碼show出來,本文就沒有寫下去的必要了,不過為了全文的整體性,還是啰嗦幾句。其實面向接口編程所采用就是面向?qū)ο缶幊讨械睦^承,只不過它把所有的公共接口全部抽象出來供框架程序進行調(diào)用。這樣當我們需要增加其他類型的對象處理時,可以通過構(gòu)造并替換不同的接口函數(shù)來進行處理,從而使得整體程序改動最小。凡是一種復用的架構(gòu)都會犧牲一定的性能,不過也會增加程序的可維護性,降低程序的耦合度,如果你開發(fā)的項目并不是很復雜, 也確定了以后接口不會有新的變化,其實不使用接口也是OK的。對于自動測試程序框架,接口的預留是非常重要的,可以通過虛擬接口來測試業(yè)務邏輯,能夠模擬更多實際環(huán)境下不同的工況來進行測試。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145565
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97178

原文標題:C語言實現(xiàn)面向接口編程

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    汽車網(wǎng)絡安全開發(fā)語言選型指南:C/C++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

    汽車網(wǎng)絡安全如何選編程語言?CC++、Rust、Java……誰更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語言的優(yōu)劣
    的頭像 發(fā)表于 12-26 11:13 ?423次閱讀
    汽車網(wǎng)絡安全開發(fā)<b class='flag-5'>語言</b>選型指南:<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++/Rust/Java等主流<b class='flag-5'>語言</b>對比+Perforce QAC/Klocwork工具支持

    C語言C++的區(qū)別及聯(lián)系

    class等面向對象的特性和機制。但是,后來經(jīng)過一步步修訂和很多次演變,最終才形成了現(xiàn)如今這個支持一系列重大特性的龐大編程語言。 一、C語言
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    ,后來才逐漸演變?yōu)橐环N成熟的面向對象編程語言。 總之,C語言C++雖然有很多共同之處,但在
    發(fā)表于 12-11 06:51

    C語言C++之間的區(qū)別是什么

    區(qū)別 1、面向對象編程 (OOP): C語言是一種面向過程的語言,它強調(diào)的是通過函數(shù)將任務分解
    發(fā)表于 12-11 06:23

    單片機C語言編程的心得

    寫這個8*8按鍵程序的過程中,不管是在自己寫還是參考別人程序的過程中,發(fā)現(xiàn)自己對C語言有些基本知識點和編程規(guī)范有很多不懂的地方,有些是自己以前的編程習慣不好,有些就是基礎知識不扎實的表
    發(fā)表于 12-08 07:44

    如何調(diào)試和編程CW32F030C8T7?支持哪些調(diào)試工具和編程語言?

    了解如何調(diào)試和編程CW32F030C8T7是開發(fā)過程中的重要環(huán)節(jié)。它支持哪些調(diào)試工具(如JTAG、串口調(diào)試等)和編程語言(如C
    發(fā)表于 12-05 06:48

    為什么單片機還在用C語言編程

    說起單片機我們就會想到C語言,單片機為什么還在用C語言編程?現(xiàn)在有很多很好用的高級語言,如VC、
    發(fā)表于 11-28 07:37

    C語言編程技巧

    設計,分層開發(fā)代碼,便于理解和維護。 ?8、避免使用GOTO語句?:盡管GOTO語句在某些情況下仍然有用,但現(xiàn)代編程更傾向于使用函數(shù)和循環(huán)控制結(jié)構(gòu),以提高代碼的可讀性和維護性。 ?9、利用C語言的靈活性
    發(fā)表于 11-27 06:46

    C語言在嵌入式開發(fā)中的應用

    語言可以確保實時系統(tǒng)中的任務能夠在規(guī)定的時間內(nèi)完成,保證系統(tǒng)的穩(wěn)定性和可靠性。 4、嵌入式網(wǎng)絡編程 隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,嵌入式設備的聯(lián)網(wǎng)需求日益增長。C 語言提供了豐富的網(wǎng)
    發(fā)表于 11-21 08:09

    C語言和單片機C語言有什么差異

    區(qū)別是由編譯器決的,只能參考對應的編譯手冊,即使同種平臺不同的編譯器對C的擴展也有不同。 3、單片機c語言編程是基于C
    發(fā)表于 11-14 07:55

    單片機c語言編程實例大全

    單片機c語言編程實例大全_18
    發(fā)表于 04-30 16:11 ?7次下載

    深入理解C語言C語言循環(huán)控制

    C語言編程中,循環(huán)結(jié)構(gòu)是至關重要的,它可以讓程序重復執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環(huán),C
    的頭像 發(fā)表于 04-29 18:49 ?2035次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    如何在 樹莓派 上編寫和運行 C 語言程序?

    在本教程中,我將討論C編程語言是什么,C編程的用途,以及如何在RaspberryPi上編寫和運行C
    的頭像 發(fā)表于 03-25 09:28 ?1155次閱讀
    如何在 樹莓派 上編寫和運行 <b class='flag-5'>C</b> <b class='flag-5'>語言</b>程序?

    為什么學了C語言,卻寫不出像樣的項目?

    在學習編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C
    的頭像 發(fā)表于 03-14 17:37 ?916次閱讀
    為什么學了<b class='flag-5'>C</b><b class='flag-5'>語言</b>,卻寫不出像樣的項目?

    單片機C語言編程寶典大全,初學必備【強推下載!】

    資料介紹:包含 1. 51單片機入門教程 2. 初學者適用:單片機C語言實例100例(代碼及釋義) 3. 51單片機C語言快速上手 4. 51單片機
    發(fā)表于 03-14 11:03