点击链接加入群【C语言】:http://jq.qq.com/?_wv=1027&k=2H9sgjG



好吧,上一小节,介绍了关于预处理、编译、链接用到的工具啦,也没有什么太深的技术啦。

那么这一小节来介绍一些什么呢?

首先给大家发一个任务吧,自己测试 #include 这个预处理指令的作用,其实很简单的,就是自己弄个项目,在里面添加个.h文件,在里面写点东西,再弄个.CPP文件,然后#include 一下那个.H文件,弄个MAIN函数,然后用CL /P 源文件名  ,然后看.I文件,你看了之后也就会明白啦。

今天再来介绍一个东西呀,叫静态库。

什么叫静态库呢?其实大家想想,如果我们想求两个整数的和,这个功能可以实现吧,而且代码是固定的吧,也就是我们生成的二进制代码是一样的,那么我们就可以把这类功能的函数写成库,以方便别人使用,其实我们用的字符串拷贝函数及其它一些函数都是C语言的库里自己带的哦,也就是前辈们写好的库文件,我们就不需要再去实现啦,这叫代码重用哦。

我们演示如何创建静态库

C语言入门篇-10_C语言学习

建空项目 ,也就是什么都不选

然后添加一个源文件,在里面写如下代码

int add(int a,int b,int c)
{
    return a+b+c;
}

然后组建一下,然后工程的Debug目录下就会生成 一个 .lib文件哦,我们之后就可以在别的工程中使用它了,然后建立测试项目

添加源文件 写MAIN函数

int main()
{
    int c=add(1,2,3);
    return 0;
}

组建,会提示错误哦,为什么呢?因为它找不到 add函数的声明,也就是它不知道add是个什么东西呀,怎么办呢?我们可以声明一下,代码如下

int add(int a,int b,int c);
int main()
{
    int c=add(1,2,3);
    return 0;
}

再组建,还是失败,但失败原因不一样了哦,现在编译是没有问题了,问题是在链接的时候找不到add函数的二进制代码呢,它们在哪里呢?对了,在 上个.lib中,我们把它拷贝到测试项目目录里,拷贝过来就行了吗?肯定不行啦,还要告诉链接器去链接它呀,怎么告诉它呢?C语言入门篇-10_C语言学习_02

这样再组建项目项目就可以正常生成了,这就是我们写的一个静态库啦,唉,不对,你发现了什么问题没有?

我们需要知道函数声明形式才能行,那么怎么办呢?我们提供一个.h文件不就行了嘛,如果开头的问题你可以正确解决的话,那么你可能会想到把声明放在.h文件里就行了,其它用户想要使用我们这个库,我们就只需要把 .h(包括函数声明)和.lib文件给他就行了,是不是很简单呢。所以说 #include 还是有用处的呢,那么.lib文件又是怎么生成的呢?是上小节中的目录里的 lib.exe文件啦,它是用来生成 .lib文件的,可以将多个.obj 文件打包成一个.lib文件,如

lib a.obj b.obj ,就是这么简单啦。这就是静态库,主要是用来存放我们写的代码的二进制机器码。

怎么样,你学会了吗?