1 常见的C++/C预处理指令:#define,#ifdef,#ifndef,#endif
所谓预处理指令,即在编译器进行编译前进行的扫描源代码,进行初步转换的操作。
- #空指令 :无用
- #include :包含一个源代码文件
- #define :定义宏
- #undef :取消已定义的宏
- #ifdef :如果已经定义了宏,则编译下面代码
- #ifndef :如果未定义宏,则编译下面代码
- #if :如果给定条件为真,则编译下面的代码(常见:if 1 /if 0 )
- #elif : 如果给定条件为假,当前条件为真,则编译下面代码
- #endif :结束一个#if ->#elif->endif条件编译块
- #error :停止编译并显示错误信息
2 创建动态链接库或调用外部库时,头文件中:
#ifndef DLL_TEST
#define DLL_TEST
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
(1)ifdef的作用如下:此段代码由编译器自动生成,为了自动设置方法、变量、类的导出与导入。
-
编译器加入"DLL_EXPORTS" 目的是定义宏定义,相当于在 该头文件加上了 #define DLL_EXPORTS。
-
通过第一条宏定义判断DLL_API类型是导出:__declspec(dllexport) 还是导入:__declspec(dllimport)
(2)对于DLL导出函数和导出类的定义的区别:
//导出函数
MYDLL_API int func(int a,int b);
//导出类
class MYDLL_API cls
{
public:
int func(int a,int b);
}