在之前函数第二幕的时候我们提到过函数的声明和定义,其中有一种方式是这样使用的,如下代码所示
#include<stdio.h> int Add(int x,int y); int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); int ret = Add(a, b); printf("%d", ret); return 0; } int Add(int x,int y) { return x + y; }
这时候,有人就觉得这个也没有什么大用处啊,直接都放在开头不行吗?何必多此一举呢?,其实这种声明定义函数的方式在实际工程中并非这样使用的。在真正的项目中我们是这样使用的
我们在多放入一个头文件和一个.c文件,add.h和add.c。
然后我们把加法函数,放在add.c中
把函数的声明放在add.h中
这样的话,如果我们想在我们的工程中使用Add这个函数,我们只需要在test.c中#include "add.h"即可,如下图所示
这样我们试着运行一下,代码仍然正常运行
上面的这种操作中:
我们把add.h和add.c称作一个模块,test.c是一个模块
add.h和add.c为加法模块,test.c为测试模块,也就是test.c就是为了测试一下加法模块
在加法模块中,我们一般是在头文件中声明函数,.c文件中是实现函数,然后测试模块,只需要引用一下头文件,编译器就会自动将三个文件组合到一块。有点类似于使用库函数,只不过这个库函数是由我们自己制作的。但是要注意,使用c语言提供的库函数,是引用 <>这个括号,而我们自己造的库函数是需要使用 '' "的。
那么这样写有什么好处呢?
1.这样写可以是我们的程序模块化
比如说我们有一个加减乘除的程序,我们利用这种方式可以进行分工,一个人写一个模块即可。这样的话,每个人只需要开发自己的模块就可以,最后我们一调用他们的模块就可以了。我们这样就实现了模块发开发了。
2.这样写也可以隐藏我们的代码
我们之前说过,想要调用同一个项目的不同源文件的函数,我们可以使用一个extern声明一下函数就可以,那为什么我们又要搞一个头文件,然后引用呢?,原因是是由头文件可以做到相关代码的隐藏。
我们举一个例子吧,假如说张三写了一个代码,他想把这个代码卖给一个公司,但是又不能直接给源代码,因为明年没法收费了。那该怎么解决呢?
假如说这是我们所写的代码
我们是这样做的
我们点击这个
改为静态库
应用确定后
我们运行一下程序,得到下列错误信息
这时候我们就生成了我们的静态库了
我们在上面提示的路径中找到我们的文件
这时候我们就可以把这个.lib文件和我们的头文件一块卖出去了,这个是没有人看得懂的,我们用记事本打开看一下
买家将买到的静态库和头文件放到文件中
我们直接使用是不行的
会出现无法解析的外部命令,这时候我们只需要输入一条指令,导入静态库即可
这样代码就能正常运行了
总结:
本次外传主要讲解了定义和声明在工程中的重要作用,以及如何隐藏自己的代码。当然静态库的使用并不是本节课的重点,主要是为了演示定义和声明的重要作用,以后会详细介绍关于静态库的使用的