参考:https://blog.youkuaiyun.com/bailyzheng/article/details/7537872
预处理指令
1. #define
2. #ifdef #ifndef #endif
3. #pragma 参数
-
#pragma comment
格式:#pragma comment(comment-type, ["commentsting"])
comment-type
是预定义标识符,包括compiler
,exestr
,lib
,linker
之一
compiler: 编译器的版本或者名字
exestr: 将取消
lib: 添加库搜索记录到对象文件中,可以在一个源文件中设置多个库记录,在对象文件中的顺序与在源文件中的顺序一议案给。
linker: 指定一个连接选项,这样就不用在命令行输入或者在开发环境中设置了。选项包括/DEFEAULTLIB
,/EXPORT
,/INCLUDE
,/MANIFESTDEPENDENCY
,/MERGE
,/SECTION
例子:- 静态链接库文件
#pragma comment(lib,"ws2_32.lib")
- 链接器选项
#pragma comment(linker,"/INCLUDE:__tls_used")
-
其他用法:
(1)/DEAFULTLIB:library
添加一个library到LINK解析引用时搜索的库列表。在命令行指定库之后和目标文件中指定的默认库之前搜索libray。/NODEFAULTLIB:library
可以重写选项/DEFAULTLIB:library
。
(2)/EXPORT:entryname[,@ ordinal[,NONAME]][,DATA]
用于从本程序导出函数,以便其他程序可以使用。也可以导出数据。通常用在DLL文件中。entryname
是函数或数据项的名称,ordinal
为1-65535之间的索引。NONAME
指定将函数通过序号导出,没有entryname
。
DATA
指定导出项为数据项,客户程序中数据项必须用extern __declspec(dllimport)
来声明。> 三种导出定义的方法: > __declspec(dllexport) > .def文件中的EXPORTS语句 > LINK命令中的/EXPORT
(3)
/INCLUDE:symbol
通知链接器将指定的符号添加到符号表。
要指定多个符号,则在符号名称之间键入逗号、分号或空格。命令行中,对每个符号指定一次/INCLUDE:symbol。
这个功能对于包含不会链接到程序的库对象非常有用。用该选项指定符号将通过/OPT:REF
重写该符号移除。
-
定义数据段
#pragma data_seg(".CRT$XLX") PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = {TLS_CALLBACK1, TLS_CALLBACK2, 0} #pragma data_seg()
-
指定只编译一次
#pragma once
由于可移植性问题,可以使用另一种方案:
#ifndef
,#define
,#endif
-
设置程序中函数代码存放的代码段(开发驱动程序的时候使用)
#pragma code_seg(["section-name"[,"section-class"]])
-
预编译头文件到此为止,后面的头文件不进行预编译。防止预编译所有头文件占用太多磁盘空间。
#pragma hdrstop
BCB是什么
预编译选项
Z, /MT, /ZP[1/2/4/8/16]