1. 概念
所谓模块化编程(多文件开发),就是多文件(.c文件)编程,一个.c 文件和一个.h文件可以被称为一个模块。把功能相似的函数封装在不同的文件中
2.以下场景中会使用头文件
2.1 通过头文件来调用库函数功能
在很多场合,源代码不便向用户公布,只需要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口说明来调用库功能能,而不必关心接口是怎样实现的
2.2 多文件编译
将稍大的项目分成几个文件实现,通过头文件将其他几个文件的函数声明引入到当前文件
2.3 头文件能将强类型检查安全
如果某个接口被实现或被使用时,其他方式与头文件的声明不一致,编译器就会报错,这一简单的规则能大大减轻程序员调试、改错的负担
3. 实现
.c C语言的源文件
.h 头文件
a.方法的声明 但是不能实现
b.声明变量
c.声明结构体
4.好处
a.用的时候,只需包含.h文件,对外隐藏源文件的实现
b.团队的分工和写作
c.可以把功能细化分若干个模块
5.多文件开发的实现和注意事项
5.1 实现举例
实现简单计算器
a) 头文件Calculator.h内容
- #ifndef Day07_Calculator_h
- #define Day07_Calculator_h
- //return a + b
- int add(int a, int b);
- //return a - b
- int sub(int a, int b);
- //return a * b
- int mul(int a, int b);
- //return a / b
- int divd(int a, int b);
- //return a % b
- int rem(int a, int b);
- #endif
复制代码
b) Calculator.c 内容
- #include <stdio.h>
- int add(int a, int b){
- return a + b;
- }
- int sub(int a, int b){
- return a - b;
- }
- int mul(int a, int b){
- return a * b;
- }
- int divd(int a, int b){
- return a / b;
- }
- int rem(int a, int b){
- printf("hhhh");
- return a % b;
- }
复制代码
c) 主调函数main.c 里面的内容
- printf("result = %d\n", rem(5, 2));
复制代码
d) 打印结果: result = 7;
5.2 注意事项
a.头文件中可以和C程序一样引用其他头文件,可以写预处理块,但不要写具体语句
b.可以声明函数,但不可以定义函数
c.可以声明变量,但是不可以定义变量
d.可以"定义"一个宏函数。注意,宏函数很像函数,但却不是函数,其实还是一个声明
e.结构的定义,自定义数据类型一般也放在头文件中
f.多文件编程时,只能有一个文件包含main函数,因为一个工程只能有一个入口函数,把包含main函数的文件称为主文件
g.为了更好的组织各个文件,一般情况下,.c文件对应一个.h文件,并且文件名要相同
h.头文件要租售幂等型原则,即可以多次包含相同的头文件,但效果与只包含依次相同
i.防止重复包含的措施,宏判断
|
|