多文件编程
加入嵌入式技术QQ群:398294860,免费获取嵌入式技术文档,嵌入式最新学习路线指南,更多嵌入式教程,访问宅学部落淘宝店:https://wanglitao.taobao.com/
在C语言编程中,函数的声明一般会放在以.h为后缀的头文件里,而函数的实现一般会放在以.c为后缀的源文件里。我们在调用某个函数,不需要显式去声明这个函数,直接使用预处理器命令#include,把对应的头文件包含进来就可以了。
比如上面的add函数,我们可以分别创建一个add.c文件和add.h文件,add函数的实现放在add.c里,而add函数的声明则放在add.h里。
//main.c
#include <stdio.h>
#include "add.h"
int main(void)
{
int sum;
sum = add(3, 4);
printf("sum = %d\n", sum);
return 0;
}
//add.c
int add(int a, int b)
{
int result;
result = a + b;
return result;
}
//add.h
int add(int a, int b);
前面的程序,我们都是将所有的代码放到一个文件里,然后编译程序时直接编译单个文件就可以了。而现在呢,我们将add函数的实现单独放在了add.c源文件中,将add函数的声明单独放在了add.h头文件中,将main函数单独放在了main.c源文件中。
因为我们在main函数中要调用add函数,调用之前要先进行声明,而add函数的声明在add.h中,因此我们直接使用#include命令直接包含add.h,然后就可以在main函数中直接调用add函数了。编译器在编译程序时,会将#include包含的add.h的头文件内容直接在原处展开。
编译上面的main.c和add.c源文件,并运行:
root@ubuntu:/home/code# ls
add.c add.h main.c
root@ubuntu:/home/code# gcc main.c add.c
root@ubuntu:/home/code# ./a.out
sum = 7
root@ubuntu:/home/code#
在实际公司项目开发过程中,一个项目通常由多个人共同开发,项目划分为不同的模块,每一个负责一个模块,每个模块可能单独有一个.c后缀的源文件实现,每个人将自己要实现的函数放在各自的.c源文件中,并将实现的函数接口在对应的头文件里进行声明。当其他人想使用你实现的函数接口时,直接使用#include预处理命令包含你的头文件,然后就可以直接调用了,非常方便。同样的道理,如果你想使用某个模块里定义的函数,直接#include这个模块对应的头文件,然后也就可以直接调用它们了。
专门为嵌入式设计的C语言进阶视频教程:《C语言嵌入式Linux高级编程》,一共9期,涉及计算机体系结构、ARM汇编与反汇编、程序的编译链接原理、堆栈内存、Linux内核的面向对象编程思想、多任务编程、C语言的模块化编程等专题,具体课程详情可点击淘宝:C语言嵌入式Linux高级编程