利用C语言结构体封装函数

本文对比了C++与C语言中串口函数的封装方式。C++通过类实现封装,使调用更加简便;而C语言则利用结构体与函数指针结合的方式达到类似效果,便于移植。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++语言类中可以封装函数,体现了模块操做的整体性,下面代码便是C++语言对串口函数的封装,这样操作便于调用。

class MarlinSerial //: public Stream
{
  public:
    MarlinSerial();
    void begin(long);
    void end();
    int peek(void);
    int read(void);
    void flush(void);
}
调用方法:

MarlinSerial MSerial; //实例化一个对象
MSerial.begin(9600);//设置串口的波特率为9600
这样便实现了串口的初始化。对串口操作函数进行了模块化封装,代码结构清晰。那么C语言是否可以实现这种方式呢?

C语言结构体不能直接封装函数,但可以通过封装函数指针的方式来实现,下面便是我实现的具体方式,可以很方便的移植到任何编译器上测试。

/* serial.h文件 */
//定义封装函数的结构体,并声明外部引用
//对串口操作函数封装。
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类型的结构体MSerial 

Serial_Init()
{
  MSerial.read = &Serial_Read;
}

 uint8_t Serial_Read(void)
{ 
   printf("hello word!"); //在这里仅作测试所用,未列出真正的串口读取函数
} 

/* main.c文件 */
int main(void)
{
    Serial_Init();
    MSerial.read(); //调用串口读取函数,目前功能为打印字符串
    while(1)
    {
       //
    }
}

第一次发帖不知道说的是否清楚,如有疑问欢迎提问,欢迎大家多提宝贵意见!


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值