目录
1.预处理指令
#include< >和#include" "的区别:
- < >系统定义头文件
- “ ”自定义头文件
2.宏函数
#define SUM(x,y) ((x)+(y))
void test()
{
int ret=SUM(10,20);
}
注意:
- 宏的名字中不能有空格
- 要用括号,扩住每个参数,和宏的整体定义
- 大写字母表示宏的函数名
3.特殊宏
- 宏所在文件 _FILE_
- 宏所在行号 _LINE_
- 日期 _DATE_
- 时间 _TIME_
4.条件编译
//测试存在
#ifdef 标识符
程序段1
#else
程序段2
#endif // 标识符
//测试不存在
#ifndef 标识符
程序段1
#else
程序段2
#endif // 标识符
作用:防止头文件被重复包含引用,例如
//宏定义不存在的时候再define
#ifdef FILE_H
#define FILE_H
程序
#endif
5.静态库优缺点:
- 对函数的链接是在编译完成的,在链接时,静态库被复制到程序中;
- 程序运行时和函数库没有关系,移植方便;
- 所有相关的文件与库函数被链接合成一个可执行文件,浪费空间和资源。
静态库函数测试:
- 创建测试项目
- 将lib库文件和头文件放入项目下
- 添加现有项,即include对应的头文件
- 使用库函数
6.动态库
把链接过程推迟到了运行时。
_declspec(dllexport)int mySub(int a,int b);
导出函数需要特殊声明,会生成一个.lib和.dll文件。
注意:
- _declspec(dllexport)意味着导出函数,导出函数可以被其他模块调用,不加这个,默认内部函数,内部函数在定义他们的dll程序内部使用
- 静态库的.lib包含函数的声明实现,动态库的.lib只有声明,实现在.dll中
动态库函数测试:
- 创建测试项目
- 将.lib .dll和头文件放入项目下,添加现有项,即include对应的头文件(或者#pragma comment(lib,"./动态库名称.lib")
- 使用库函数