C语言接口实现实例
C 语言的接口实现,虽然没有面向对象那一套,但其实用起来也挺灵活的。像函数指针、结构体封装这些套路,玩熟了之后,接口抽象也能搞得像模像样。
模拟接口的核心其实就靠函数指针这玩意儿。你可以把它想成“指向函数的变量”,通过它来定义接口方法,后面谁实现这个接口,就去写一套对应函数就行。
一般会把这些函数指针都塞进一个结构体里,像个组件一样打包好。比如你要写个设备驱动,就可以有init
、read
、write
几个函数指针放一块儿,谁要用这接口,就按这个格式写自己的实现。
再说个挺实用的点,回调函数。你可以把函数指针当成参数传进去,让别人调用你指定的逻辑。比如定时器到了执行某个动作,回调就合适。
虽然 C 不支持动态绑定,但用函数指针也能实现运行时调用不同函数,像个简化版的虚函数表。接口也能换着实现用,挺灵活。
还有就是多态性,其实也能模拟。比如你定义一个通用的接口,设备 A 和设备 B 都实现自己的版本,调用时根本不用关心具体是哪一个,只管调接口就行,逻辑清晰还方便扩展。
但用接口也得注意内存管理。结构体谁分配,谁释放,指针别乱用,改完函数指针记得清理,不然内存泄漏跑不了。
建议接口的定义和实现最好分开写,像interface.h
放接口定义,impl.c
里写实现。模块清晰了,维护和复用都方便。
如果你还不太熟这些套路,建议看看这篇源码实例,写得蛮清晰的,多技巧直接拿来就能用:
如果你在写 C 项目,想搞点结构清晰、扩展性好的模块设计,可以试着玩一玩这个接口实现方式,真的挺香。
82.33KB
文件大小:
评论区