c语言露台设计气势派头图片欣赏中如何实现模块

http://www.ntxhsm.com 2019-09-02 17:43

首先要说的是C语言在语言层面并没有模块化的观点。

但是一说的C语言的模块,我们可能首先想到的是一个普通的.c文件,这个应该都知道,再一个就是C代码编译链接后的静态库(gcc生成.a,vc生成.lib)或圈外人动态库亚博体育官网下载地址(gcc生成.so,vc生成.dll),但其实不贰贰管是静态库还是动态库,C语言的语言层面并没有对静态库和动态库撑持,静态库仅仅是在链接的时候将我们的已经编译好代码和第三方静态库的已经编译好代码的代码捏(链接)到一起,C语言源码层面并不贰贰知道本身的代码是在某个静态库傍边还是直接在可执行措施中。同样这个原理在动态库中也是一样的,只不贰贰过动态库的加载还需要操纵系统的系统挪用来撑持才可以,因为你的措施挪用动态库的时候,操纵系统还要对动态库文件进行地点映射,标记表对应的挪用地点进行查找,代码共享,写时复制等级等级操纵,这些是操纵系统在背后做的一系列工作,这些也是和语言无关的对象。


我们看到的一些闻名气的c语言linux开源项目很少使用动态库或静态库的分模块设计,如mysql,nginx,或圈外人redis,基本上是直接编译源文件链接成单个的可执行措施。但是也有以下几种情况,如:


1.我们开发的是一个sdk,可以被第三方引入使用,这时候我们就需要可以让我们的措施编译成动态库或圈外人静态库,通过提供头文件,可以让第三方直接使用。好比libcurl,或圈外人libz,前圈外人可以被第三方使用来得到http客户真个能力,后圈外人可以用来解压缩。


2.我们开发措施准许第三方来进行扩展,这样我们就可以规定好接口法则,让第三方根据我们的接口法则来开发扩展插件,假如需要在编译器时直接合并插件,我们可以要求第三方根据我们的接口开发静态库,或圈外人直接使用源码编译链接到我们的措施中。假如需要在运行时动态按需加载,可以要求第三方根据我们的要求开策动态库,并安排到指定目录,我们的措施运行时按照需要再到指定目录根据特定法则加载动态库,并相近到需要运行的接口函数。




建议

C语言没有包,没有模块,也没有定名空间,无锡新闻网,一般对照大一些的项目,我们可以用静态库或动态库的方法按功能拆分我们项目,并且为了防备定名斗嘴,最好导出函数使用不贰贰同的前缀来进行区分,非全局函数使用static来修饰,让其感化域只限制在当前文件模块内。




标签 动态 静态