首先我们先在常见的.c文件里写这样一个add函数
int add(int x, int y);//这叫做函数的声明,主要作用是表明函数的返回值、函数的参数类型、函数名,也可以像下面这样写
//int add(int,int)
int main()
{
int a = 1;
int b = 2;
printf("%d", add(a, b));//在调用一个函数前一定要先声明
return 0;
}
int add(int x, int y)//这是函数的定义,主要是函数的具体实现方法
{
return x + y;
}
但是实际上公司里。函数的声明是放在一个.h的头文件里,所以,我们创建一个新的解决方案,就假设这是一个程序员写的某一个模块的代码,创建一个.h文件,将函数的声明放在这里面。
创建一个add.c文件用来存放add函数的定义
此时add.c和add.h称之为一个加法模块。
如果这个模块是我们自己用,也就是在同一个解决方案里面用,那么,只需要引用我们自己创建的这个库函数就行,而引用自己的库函数模板是
#include "add.h"//引用自己创建的库函数,用的是双引号。
创建一个主文件(main所在的文件),把剩余代码写上,如图就成功编译出来了
之所以一个程序要分成这样主要原因有两个
第一就是模块化的编程便于分工,这个每个人都可以负责一个部分。比如实现一个计算器,甲可以负责加的部分,也就负责add.h和add.c,已负责减,也就是负责sub.h和sub.c等等。
第二是便于在透露函数具体实现方法的前提下,让别人也可以调用我们自己创建的函数。这就是所谓的静态库。我们将自己创建的函数打包成静态库,别人要使用我这个库里面的函数,直接调用即可。这也是为什么要把函数声明和定义放两个文件里面,别人调用只知道我的函数的声明,但不是具体的实现方法。
那么怎么做呢
假如说现在有一个程序员就写了这样一个add.h和add.c代码,
先找到解决方案的属性
先将文件生成改为静态库
再生成解决方案
生成成功
然后再去文件存储的路径中找到test.lib,就是我们的静态库
把这个lib文件和add.h文件都复制到我们需要调用add函数的那个解决方案的文件夹里,我这里的解决方案名字是2.1
我们用vs打开2.1解决方案,然后把头文件add.c添加进去
然后类似于引用头文件一样,引用这个test.lib静态库
#pragma comment(lib,"add.lib")
以及不要忘记引用add.h的头文件
这样就编译成功了
实际上我们使用的库函数也是在静态库里的