编译器:VS2022
一、 函数的声明和定义
#include<stdio.h>
int main()
{
int a = 10,b = 20;
int sum = Add(a, b);
printf("%d", sum);
return 0;
}
int Add(int x, int y)
{
return x + y;
}
这样一段代码中,在VS2019的版本下,编译器就会给出警告: “Add”未定义。这是什么一种情况呢?这是因为C语言规定,程序中使用到的任何数据对象都要事先进行声明。
1.函数声明
对于函数的声明来说,需要包涵这么几个具体信息:函数名,函数的返回值类型,函数参数的个数、类型及排列次序。这样在编译系统对函数的调用进行检查时,就事先声明了我这个函数存在,以及检查实参和形参类型是否一致,使用调用方式是否正确等。
对于上面给出的代码,如果想进行函数的声明,也很简单,只需要在主函数内部,或者头文件下方加上:
int Add(int x,int y);
对于函数的声明一般出现在函数使用之前,要满足先声明后使用。
2.函数定义
一个函数总归会有其功能,而实现这个功能的代码就是函数的定义。一个函数的一般形式就是:
返回值数据类型 函数名(数据类型 形参,数据类型 形参)
{
语句;
}
对于上面的代码,函数的定义就是:
3.函数的头文件和源文件
那么这时候问题就来了,如果所有代码都放在同一个文件下面,多个程序员共同完成一个项目的时候,你写一点我写一点,这个代码就乱了套了。所以我们要将函数的声明作为函数的头文件,函数的定义作为函数的源文件。
这样分装函数之后,如果假如有几个程序员想一起做一个项目,就例如说大家一起做个计算器。规定A去做加法部分,B去做减法部分,C去做乘法部分,D去做除法部分。就有很明确的分工,最后在主函数中调用相关的函数就可以实现计算器的功能。
那么我们怎么在main函数的文件中调用我们自定义的函数呢,我们之前调用库函数的时候,例如:printf、scanf、strcmp等等,在文件最上方我们都写了这样一行代码;
#include<stdio.h>
#include<string.h>
我们都添加了头文件,以便我们能够使用相关的库函数。那我们的自定义函数,也需要引用头文件,不过和库函数头文件有一些不同:
这里我们用的不是三角括号,而是双引号,需要注意。
二、 函数编译成静态库
假如你自己写了一个代码,实现某一个功能,其他人想要用你的代码,你不想让他知道你的源码,只想让他借用这个功能,这里就需要将我们的代码文件编译成静态库,其他人想要用这个代码,智能通过调用静态库的方式,并不能直接查看我们的代码。
这时候我们写了个代码,用来实现求两个数相加的和的功能。
经过这4个步骤我们可以打开Add项目的文件夹,可以看到文件夹里有个Add.lib文件:
那么这个就是我们封装好的Add的静态库。
那么不是说别人查看不了这个静态库的源码吗,我们可以做个实验,用记事本打开我们这个lib文件:
打开之后我们可以看到这样一堆乱码,完全就看不懂具体的内容,计算机已经将其编译成二进制了。
三、 静态库的引用
封装完毕静态库,另外一个程序员想借我们函数的功能一用。我们只需要将刚才的Add.lib文件以及Add.h文件发给他。
这是头文件的地址。
只需要将这两个文件,放在项目目录下,那么就可以调用我们的函数实现功能。
第一步:添加现有项目,也就是我们Add.h
第二步:在代码中加入这样一段引用代码,就可以调用静态库里的代码了
这就是函数编译静态库的全部内容了。
能力有限,多多包涵。