函数和函数库¶
函数声明(函数原型)¶
函数调用只能调在它前面写的函数,在下面写的就找不到。
如果所有的函数都写到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三个文件。
库
- 动态链接库
- 静态链接库
创建项目要创建库项目,不是常规的项目。
头文件需要把函数导出__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放到一个文件中。