多文件编程
- 1. 概念
- 2. 基本规则
- 一个文件里可以包含多个函数
- 一个函数只能属于一个文件
- 3. 改造步骤
- 1. 把程序的函数分别写在多个不同的源文件里(主函数通常单独占一个文件)
- 2. 为每个源文件编写配对头文件(以 .h 做扩展名),头文件至少要包含源文件所有函数的声明,理论上所有不分配内存的内容都可以写进头文件,(只包含主函数的源文件不需要配对头文件)
- 3. 在每个源文件里包含必要的头文件,必要头文件分2种
- 1.源文件所配对的的头文件。 #include "****.h"
- 2.如果一个源文件里使用了某个头文件里声明的函数,那这个头文件也是这个源文件的必要头文件
- 4. 编译方法
- 在gcc命令后列出所有源文件的路径
- 使用Makefile文件记录整个编译过程
#include <stdio.h>
#include "multi_read_1.h"
int main() {
int val = 0;
val = read();
printf("%d\n", val);
return 0;
}
#ifndef __MULTI_READ_1_H__
#define __MULTI_READ_1_H__
int read(void);
#endif
#include <stdio.h>
#include "multi_read_1.h"
int read(void) {
int val = 0;
printf("请输入一个整数: ");
scanf("%d", &val);
return val;
}
# 2. 最后把所有的 .o 目标文件合并成 a.out 可执行文件
a.out : multi_read_1.o multi_main_1.o
gcc multi_read_1.o multi_main_1.o
# 1. 为每个源文件单独写一个编译过程
#下面表示可以根据 multi_read_1.c 源文件编译得到叫 multi_read_1.o 的目标文件
#Tab键开头加 gcc -c 就可以编译一个不完整的程序
multi_read_1.o : multi_read_1.c
gcc -c multi_read_1.c
multi_main_1.o : multi_main_1.c
gcc -c multi_main_1.c
##真正的 Makefile 文件每一步都是可扩展的,上面的只是最简单的一个例子
- 5. 注意事项
- 只要是不分配内存的内容都可以写在头文件里
- 头文件内容应该包含在条件编译预处理指令中间
- 头文件里使用宏名称应该根据头文件名称变化得到
- 为了从一个源文件里使用另外一个源文件里声明的非静态全局变量,就需要在这个源文件里使用 extern关键字再次声明那个全局变量(不可以从一个源文件里使用另一个源文件里的声明的静态全局变量,因为静态全局变量的作用域是当前文件的所有语句)
- 使用extern关键字声明的语句常常放在头文件里
#include <stdio.h>
#include "multi_read_1.h"
int main() {
read();
printf("%d\n", val);
return 0;
}
#ifndef __MULTI_READ_1_H__
#define __MULTI_READ_1_H__
extern int val;
void read(void);
#endif
#include <stdio.h>
#include "multi_read_1.h"
int val;
void read(void) {
printf("请输入一个整数: ");
scanf("%d", &val);
}