跳转至

函数和函数库

函数声明(函数原型)

函数调用只能调在它前面写的函数,在下面写的就找不到。

如果所有的函数都写到mian前面,不方便,所以在main前面写函数的声明。然后就可以使用。

函数声明写在前面,函数定义写哪里都可以。

函数声明参数的名称可以写,可以不写,写上最好。

参数名也可以和函数定义的参数名不一样。最好写一样。

函数参数

C语言里没有参数要写void。void func(void);

C++里没有参数可以什么都不写。void func();

C语言里表示多个参数

void func3(int a, int b, ...);

前两个参数必须有,后面的可有可没有,可有多个。

函数库

别人写好的函数,编译之后可执行的二进制代码。直接使用。

dll,lib。还有头文件。lib是编译的时候要用。引入头文件引入库文件。

引入库文件:

#pragma comment(lib, "SDL\lib\x86\SDL.lib") //没有分号

创建库

做成库使用起来方便

把Stash的源文件头文件做成一个库。

源文件:.h .cpp 两个文件

做成库:.h .lib .dll三个文件。

  1. 动态链接库
  2. 静态链接库

创建项目要创建库项目,不是常规的项目。

头文件需要把函数导出__declspec(dllexport)。不然就是库内部的函数,外界不能使用。

// C语言的Stash
typedef struct CStashTag
{
    int size;// 每一个是多大。存字符串的话就是最多的存多少字符。
    int quantity;// 数量。一共可以保存多少个。
    int next;// 已经保存了多少个。
    unsigned char* storage;// 指针
}CStash;
// 一些操作
//__declspec(dllexport) void initialize(CStash* s,int size);
__declspec(dllexport) void cleanup(CStash* s);
__declspec(dllexport) void inflate(CStash* s,int increase);
__declspec(dllexport) void* fetch(CStash* s,int index);
__declspec(dllexport) int add(CStash* s,const void* element);
__declspec(dllexport) int count(CStash* s);
// 扩大内存
__declspec(dllexport) void inflate(CStash* s, int increase);

源文件不需要修改,和之前一样。

使用:创建常规项目,然后把.h .lib .dll拖进项目中,使用时导入头文件。

#pragma comment(lib,"lib文件位置") //编译时候要用

要把库的dll文件放到Debug文件,和exe放到一个文件中。