C语言#pragma用法详解.docx

C语言#pragma用法详解.docx

ID:51686764

大小:38.34 KB

页数:7页

时间:2020-03-15

C语言#pragma用法详解.docx_第1页
C语言#pragma用法详解.docx_第2页
C语言#pragma用法详解.docx_第3页
C语言#pragma用法详解.docx_第4页
C语言#pragma用法详解.docx_第5页
资源描述:

《C语言#pragma用法详解.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、目录:(0)前言(1)#pragmamessage能够在编译信息输出窗口中输出相应的信息(2)#pragmacode_seg能够设置程序中函数代码存放的代码段,开发驱动程序的时会用到(3)#pragmaonce若用在头文件的最开始处就能够保证头文件被编译一次(4)#pragmahdrstop表示预编译头文件到此为止(5)#pragmaresource"*.dfm"表示把*.dfm文件中的资源加入工程(6)#pragmawarning允许有选择性的修改编译器的警告消息的行为(7)#pragmacomment将一个注释记录放入一个对象文件或可执行文件中(8)#pragmadata_s

2、eg建立一个新的数据段并定义共享数据应用1:在DLL中定义一个共享的,有名字的数据段应用2:data_seg控制应用程序的启动次数(9)其他用法(0)前言#Pragma指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为:#PragmaPara其中Para为参数,下面来看一些常用的参数。(1)#Pragmamessage参数能够在编译信息输出窗口中输出相应的信息这对于源代码

3、信息的控制是非常重要的。其使用方法为:Pragmamessage(“消息文本”)当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法#ifdef_X86#pragmamessage(“_X86macroactivated!”)#endif若定义了_X86,程序编译时就会在显示“_X86macroactivated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。(2)#pragmacode_seg能够

4、设置程序中函数代码存放的代码段,开发驱动程序的时候就会使用到它。格式如下:#pragmacode_seg([[{push

5、pop},][identifier,]]["segment-name"[,"segment-class"]])该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,如果code_seg没有带参数的话,则函数在OBJ文件中存放在默认在.text节中。push(可选参数)将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名pop(可选参数)将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名iden

6、tifier(可选参数)当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈"segment-name"(可选参数)表示函数存放的节名例如://默认情况下,函数被存放在.text节中voidfunc1(){//storedin.text}//将函数存放在.my_data1节中#pragmacode_seg(".my_data1")voidfunc2(){//storedinmy_data1}//r1为标识符,将函数放入.my_data2节中#pragmacode_seg(push,r1,".my_data2")voidf

7、unc3(){//storedinmy_data2}intmain(){}(3)#pragmaonce(比较常用)若用在头文件的最开始处就能够保证头文件被编译一次.一般在整个工程中我们只要包含头文件一次就够了,若多个.c/.cpp文件中都要包含同一个头文件,比如Windows.h,那很多声明等等岂不是有两次了?解决这个问题的传统的方法是在头文件开始出用#define定义一个宏,比如Windows.h中:#ifndef_WINDOWS_#define_WINDOWS_#endif这样就可以避免被包含多次。但是这样的后果是代码的可读性较差(个人观点),VC给我们提供了另外一个途径,那

8、就是在文件的前面加上:#pragmaonce”(4)#pragmahdrstop表示预编译头文件到此为止后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件.有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragmastartup指定编译优先级,如果使用了#pragmapackage(smart_init),BCB就会根据优先级的大小先后编译。(5)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。