利用C語(yǔ)言結(jié)構(gòu)體封裝函數(shù)
點(diǎn)擊下方“程序員編程基地”,一起進(jìn)步!
重磅干貨,第一時(shí)間送達(dá)
來(lái)源:程序員編程基地
作者:名燮
C++語(yǔ)言類(lèi)中可以封裝函數(shù),體現(xiàn)了模塊操做的整體性,封裝后的函數(shù)可以完成自己獨(dú)特的功能,每個(gè)函數(shù)提供給你一個(gè)接口,使用者只需要通過(guò)這個(gè)接口傳入合法的數(shù)值便可以得到想要的結(jié)果。
函數(shù)封裝具有保護(hù)性
下面代碼便是C++語(yǔ)言對(duì)串口函數(shù)的封裝,這樣操作便于調(diào)用。
class MarlinSerial //: public Stream{public:MarlinSerial();void begin(long);void end();int peek(void);int read(void);void flush(void);}
調(diào)用方法:
MarlinSerial MSerial; //實(shí)例化一個(gè)對(duì)象MSerial.begin(9600);//設(shè)置串口的波特率為9600
這樣便實(shí)現(xiàn)了串口的初始化。對(duì)串口操作函數(shù)進(jìn)行了模塊化封裝,代碼結(jié)構(gòu)清晰。那么C語(yǔ)言是否可以實(shí)現(xiàn)這種方式呢?
typedef struct _Parent
{
int a;
int b;
void (*print)(struct _Parent *This);
}Parent;
C語(yǔ)言結(jié)構(gòu)體不能直接封裝函數(shù),但可以通過(guò)封裝函數(shù)指針的方式來(lái)實(shí)現(xiàn),下面便是我實(shí)現(xiàn)的具體方式,可以很方便的移植到任何編譯器上測(cè)試。
serial.c文件
/* serial.h文件 *///定義封裝函數(shù)的結(jié)構(gòu)體,并聲明外部引用//對(duì)串口操作函數(shù)封裝。typedef struct{void begin(long);void end();int (*peek)();uint8_t (*read)(void);void (*flash)();int (*availiable)();void (*checkRx)();}MarlinSerial;extern MarlinSerial MSerial;
?
serial.c文件
MarlinSerial MSerial; //定義MarlinSerial類(lèi)型的結(jié)構(gòu)體MSerialSerial_Init(){MSerial.read = &Serial_Read;}uint8_t Serial_Read(void){printf("hello word!"); //在這里僅作測(cè)試所用,未列出真正的串口讀取函數(shù)}/* main.c文件 */int main(void){Serial_Init();MSerial.read(); //調(diào)用串口讀取函數(shù),目前功能為打印字符串while(1){//}}

程序員編程基地 為大家提供與Python相關(guān)的編程學(xué)習(xí)基地
長(zhǎng)按指紋 > 識(shí)別圖中二維碼 > 添加關(guān)注
覺(jué)得不錯(cuò),點(diǎn)個(gè)“在看”然后轉(zhuǎn)發(fā)出去
評(píng)論
圖片
表情

