六.树莓派4B-Linux下的模块化编程方式

学习目标:

本章主要讲述如何在Linux系统下实现C语言代码的模块化编程和编译。
模块化编程是最常用的一种编程风格,它能够使一个整体项目拆分成多个模块来实现,并将每个模块存储在其它任何.c文件里,主程序.c文件只需调用这些模块就可以还原该项目,也可以被其它任意项目调用。所以模块化编程最大的好处之一就是使得模块利用率高、实现可移植性和灵活性,也便于对某个功能进行配置。实现同样功能的项目,若用模块化编程的方式实现,主程序.c文件的内容将变得简洁,大大提高了代码的可阅读性,所以实现模块化编程是学习编程需要掌握的基本技巧。
在windows系统下,有着大量编写代码的IDE工具,程序员只需要关心代码的编码,剩下的编译、模块化、静态库、动态库编译等IDE工具都自动帮你完成,的确方便很多,但在Linux下,编写代码一般不用到IDE,这就要求我们既要掌握代码,同时也要学会手动编译,由于各种因素,如模块化编程等,编译的方式又有区别,所以各种编译方式都要掌握。


头文件的作用:

  1. 头文件分为C语言标准库头文件和自定义头文件,格式:****.h
  2. 树莓派系统默认将C语言标准头文件都放在usr根目录里,如:/usr/include,并且系统配置环境也默认指向这个文件,当文件被编译时,gcc会自动到这个根目录底下找头文件,但是自定义头文件的位置是由你自己决定的,所以在编译时要么将头文件也放入到该根目录下,要么就用#include "****.h"方式指向当前文件下找头文件,或者配置系统变量环境添加上头文件的路径。
  3. 头文件里的内容是对模块化.c文件功能函数的声明,是模块化文件里的函数被其它.c文件调用的桥梁。
  4. 无论是c语言标准库头文件还是自定义头文件,作用是一样的,gcc在编译时会首先是进行预编译,gcc会寻找头文件,并将头文件里的函数声明等内容进行编译并且与主程序一起预编译成***.i文件,总的来说就是帮助模块化函数提前在主程序中实现声明。

模块化文件作用:

  1. 模块化文件分为C语言标准库文件和自定义头文件,格式:.c、.a、*.so,本章节主要介绍.c文件。
  2. 无论是C语言标准库.c文件还是自定义.c文件,作用也是一样的,模块化.c文件目的就是将.h所声明的函数功能具体实现出来。
  3. 对于C语言标准库.c文件也是存放在根目录usr下,gcc编译时会根据系统环境变量去寻找.c文件并与调用者一起编译成可执行文件
  4. 对于自定义.c文件原理也差不多,要么放在系统环境变量指定存放.c库的地方或者是在编译时添加手动添加上去,如:
//main.c是主程序.c文件,model.c是模块化文件
//若model.c与main.c在同一目录里,可以省略-L(指定位置)
gcc main.c model.c -L model.c具体路径或相对路径
  1. gcc会将main.c与model.c一起编译成一个可执行文件

提示: 1.头文件名和所声明的函数对应的模块化.c文件名可以不同。 2.多个不同功能的模块化.c文件里的函数可以被同一个头文件进行声明的,只要被调用到的函数在编译时与主程序.c文件一起编译即可。 3.虽然被头文件声明但主程序.c文件中若没有调用到,那么在编译时可以不包含该模块化.c文件。


案例:

project1:

  1. Calculate.c (主程序文件)
  2. CalculateFun1.c (实现加法运算功能的模块化文件)
  3. CalculateFun2.c (实现减法运算功能的模块化文件)
  4. CalculateFun.h(对加法函数和减法函数声明的头文件)
  5. a.out(可执行文件)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
//编译方式(由于加法和减法函数都被调用,所以在编译时必须包含具体功能实现的函数文件,将三个文件编译成a.out一个执行文件,运行a.out就可以不用再依赖模块化文件和头文件了):
gcc Calculate.c CalculateFun1.c CalculateFun2.c -o a.out

project2:

  1. Calculate.c (主程序文件)
  2. CalculateFun1.c (实现加法运算功能的模块化文件)
  3. CalculateFun2.c (实现减法运算功能的模块化文件)
  4. CalculateFun1.h(对加法函数声明的头文件)
  5. CalculateFun2.h(对减法函数声明的头文件)
  6. a.out(可执行文件)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
//编译方式(由于加法和减法函数都被调用,所以在编译时必须包含具体功能实现的函数文件,将三个文件编译成a.out一个执行文件,运行a.out就可以不用再依赖模块化文件和头文件了):
gcc Calculate.c CalculateFun1.c CalulateFun2.c -o a.out
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值