大部分C编程爱好者都知道,在我们的.h文件里面经常看到的是函数的声明、变量的声明、以及各种各样的宏等等,而且在我前面的文章中我也提到过C语言的模块化设计中常常说到对应的.h和.c文件认为是一个对象,那么.h文件主要是对外的一些接口,一些私有的数据等等实现都会封装在我们的.c中,如果更加形象一点的说明我们的.h,就相当于文章下面的推荐文章链接组成的框,点进去就到了对应的具体文章,具体的文章也就是我们的.c文件了。
这里再回到我们的程序中来,如下代码所示:
- #include <stdio.h>
- #include <stdlib.h>
- int sAdd(int a,int b);
- int sSub(int a,int b);
- //...
- int main(int argc, char *argv[]) {
- printf("Add: %d\n",sAdd(1 , 1));
- printf("Sub: %d\n",sSub(1 , 1));
- return 0;
- }
- /***************************************
- * Fuction:sAdd
- ***************************************/
- int sAdd(int a,int b)
- {
- return (a + b);
- }
- /***************************************
- * Fuction:sSub
- ***************************************/
- int sSub(int a,int b)
- {
- return (a - b);
- }
- //...
解析一下: 上面是大部分小伙伴最开始学习编程的时候做法,那么我们把main函数前面的声明放到一个对应的.h文件,加法与减法的具体实现放到对应的.c文件,然后再main函数前面用#include "xxx.h",便可以了。简单点说.h完全可以直接在#include处进行展开以便于我们理解分析。
3、头文件中定义函数或者变量
代码阅读量比较多的小伙伴应该见过直接在头文件里面定义函数或者变量的做法,那么这里我们直接对上面进行改造,得到如下代码:
- //Filename: main.c
- #include <stdio.h>
- #include <stdlib.h>
- #include "Add.h"
- int main(int argc, char *argv[]) {
- printf("Add: %d\n",sAdd(global_Var1 , global_Var2));
- printf("Sub: %d\n",sSub(global_Var1 , global_Var2));
- printf("公众号:最后一个bug\n");
- return 0;
- }
- //Filename : Add.h
- /***************************************
- * Fuction:sAdd
- ***************************************/
- int global_Var1 = 2;
- int global_Var2 = 2;
- /***************************************
- * Fuction:sAdd
- ***************************************/
- int sAdd(int a,int b)
- {
- return (a + b);
- }
- /***************************************
- * Fuction:sSub
- ***************************************/
- int sSub(int a,int b)
- {
- return (a - b);
- }
解析一下:上面的程序也能够成功编译并运行,并且能够获得正确的结果,这也进一步证明直接展开#include "xxx.h"是可以解释得通的。
|