编译指令#pragma详解
副标题#e#
With #pragma, C++Builder can define the directives it wants without interfering with other compilers that support #pragma. If the compiler doesn’t recognize directive-name, it ignores the #pragma directive without any error or warning message.
C++Builder supports the following #pragma directives:
#pragma alignment
#pragma anon_struct
#pragma argsused
#pragma checkoption
#pragma codeseg
#pragma comment
#pragma defineonoption
#pragma exit
#pragma hdrfile
#pragma hdrstop
#pragma inline
#pragma intrinsic
#pragma link
#pragma message
#pragma nopushoptwarn
#pragma obsolete
#pragma option
#pragma pack
#pragma package
#pragma resource
#pragma startup
#pragma undefineonoption
#pragma warn
#p#副标题#e#
理会#pragma指令
在所有的预处理惩罚指令中,#Pragma 指令大概是最巨大的了,它的浸染是设定编译器的状态可能是指示编译器完成一些特定的行动。#pragma指令对每个编译器给出了一个要领,在保持与C和C++语言完全兼容的环境下,给出主机或操纵系统专_有的特征。依据界说,编译指示是呆板或操纵系统专有的,且对付每个编译器都是差异的。
其名目一般为: #Pragma Para
个中Para 为参数,下面来看一些常用的参数。
★(1)message 参数。 Message 参数是我最喜欢的一个参数,它可以或许在编译信息输出窗口中输出相应的信息,这对付源代码信息的节制长短常重要的。其利用要领为:
#Pragma message(“动静文本”)
当编译器碰着这条指令时就在编译输出窗口中将动静文本打印出来。
当我们在措施中界说了很多宏来节制源代码版本的时候,我们本身有大概城市健忘有没有正确的配置这些宏,此时我们可以用这条指令在编译的时候就举办查抄。假设我们但愿判定本身有没有在源代码的什么处所界说了_X86这个宏可以用下面的要领
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
当我们界说了_X86这个宏今后,应用措施在编译时就会在编译输出窗口里显示“_X86 macro activated!”。我们就不会因为不记得本身界说的一些特定的宏而抓耳挠腮了。
(2)另一个利用得较量多的pragma参数是code_seg。名目如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它可以或许配置措施中函数代码存放的代码段,当我们开拓驱动措施的时候就会利用到它。
★(3)#pragma once (较量常用)
只要在头文件的最开始插手这条指令就可以或许担保头文件被编译一次,这条指令实际上在VC6中就已经有了,可是思量到兼容性并没有太多的利用它。
★(4)#pragma hdrstop暗示预编译头文件到此为止,后头的头文件不举办预编译。BCB可以预编译头文件以加速链接的速度,但假如所有头文件都举办预编译又大概占太多磁盘空间,所以利用这个选项解除一些头文件。
有时单位之间有依赖干系,好比单位A依赖单位B,所以单位B要先于单位A编译。你可以用#pragma startup指定编译优先级,假如利用了#pragma package(smart_init) ,BCB就会按照优先级的巨细先后编译。
★(5)#pragma resource "*.dfm"暗示把*.dfm文件中的资源插手工程。*.dfm中包罗窗体外观的界说。
★(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) // 不显示4507和34号警_告信息
#pragma warning(once:4385) // 4385号警_告信息仅陈诉一次
#pragma warning(error:164) // 把164号警_告信息作为一个错误。
同时这个pragma warning 也支持如下名目:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
这里n代表一个警_告品级(1—4)。
#pragma warning( push )生存所有警_告信息的现有的警_起诉态。
#pragma warning( push, n)生存所有警_告信息的现有的警_起诉态,而且把全局警_告品级设定为n。
#pragma warning( pop )向栈中弹出最后一个警_告信息,在入栈和出栈之间所作的一切窜改打消。譬喻:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//…….
#pragma warning( pop )
在这段代码的最后,从头生存所有的警_告信息(包罗4705,4706和4707)。
★(7)pragma comment(…)
该指令将一个注释记录放入一个工具文件或可执行文件中。
常用的lib要害字,可以帮我们连入一个库文件。