头文件和模块化编程

头文件包含

头文件的内容

主要是:函数、变量的声明,宏的定义。

包含头文件后,编译的时候就会将对应的内容全部复制到文件中。

提示:头文件主要是声明,一个工程中,函数等可以多次声明。

头文件的包含要有防止重复包含的宏(#ifndef #define #endif),因为在头文件中,会进行宏定义,宏定义不能重复定义。

头文件寻找的路径

系统默认路径、用户自定义路径

<>:只从默认路径查找
“ ”: 先从默认路径查找,后从自定义路劲查找

模块化编程的方法

将所有文件放到同一个文件中进行编译时,包含头文件路径的方法:#include "link.h"其实就是#include "./link.h",包含头文件,就是包含头文件的路径。

将各个文件分为多个文件夹;相同文件放在一起。

例如:学生管理系统的模块化编程思维

image-20201207171316976

file:存放学生信息的文件

inc:存放.c文件

src:存放.h文件

output:生成的可执行文件

在当前文件夹下,编译*.c文件

头文件的寻找

在包含头文件时,头文件要加上文件所在的相对路径或者是绝对路径。

举例:在link.c文件中包含link.h的方法:

1、相对路径

#include "../src/link.h"

使用../是因为.c编译的时候,是在.c文件中,.h文件是在他的上一级目录下的文件夹里面。

2、绝对路径

#include "/home/wangzhen/mycode/test/src/link.h"

写的头文件,要让我们的.c文件在编译时能够找到他的路径。

stm32里面的头文件添加方式

image-20201207172048566

学生信息的路径

只有在读取和写入学生信息的时候,才会去寻找要写入的文件的路径。

//文件读写的绝对路径
#define FILE_PATH "/home/wangzhen/mycode/test/student/file/information.txt"
//读取信息
fp = fopen(FILE_PATH,"r");
fread(Link_new,sizeof(_Student),1,fp);
//写入信息
fp = fopen(FILE_PATH,"w+");
fwrite(Link_temp->p_next,sizeof(_Student),1,fp);

编译时的指令更改

我们要编译的是.c文件,而.c文件在inc文件夹下,编译的时候,就要修改一下指令

gcc ./inc/*.c

就是:编译当前文件夹下的 inc文件夹下的 所有.c文件

这样产生的可执行文件是:a.out,在当前文件夹下,不是我们想要的。

所以说修改指令为

gcc ./inc/*.c -o ./output

这样产生的可执行文件是:output,我们可以给生成的output加上路径。

总结

模块化编程,一般我们将各种外设的功能函数,放在不同的文件夹。

粗略的分为:.c.h文件夹,当.c.h放在不同的文件夹下时,要能保证能够让编译器找到.h文件所在位置,方法:包含.h路径时就使用“相对路径”或者是“绝对路径”,保证编译器能够找到文件夹的位置。

posted @ 2020-12-07 18:47  啊振不坏  阅读(409)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css