pragma的作用

来源:互联网 发布:什么是c语言标准库函数 编辑:程序博客网 时间:2024/04/18 11:12

不同的主机和操作系统都有其特点。为了利用好这些特点,c和c++的编译器必须能够针对不同的特性进行处理。比方说,有些程序需要准确地对内存进行管理(如应当将数据存放到哪里)或者需要指定函数接受参数的方式。#pragma指示器便用于此处!通过#pragma,我们的c和c++程序即可以保证兼容性也可以利用到低层系统的特色!
语法规则:
#pragma token-string
其中token-string给出了特定的编译指令和参数。
利用条件申明,pragma可以提供预处理功能和对编译器进行定制。c和c++可以识别以下pragma:

alloc_textcommentinit_seg1optimize
auto_inlinecomponentinline_depthpack
bss_segdata_seginline_recursionpointers_to_members1
check_stackfunctionintrinsicsetlocale
code_seghdrstopmessagevtordisp1
const_seginclude_aliasoncewarning

以下我们便就一些重要的pragma进行探讨:
#pragma comment( comment-type [, commentstring] )将注释放置到生成的目标文件或者可执行文件中去。commet-type一共有5种类型。可选的参数commenstring为这5种类型中的个别类型提供额外的参数。以下我们就5种类型进行分析与介绍:
compiler:将编译器名字和版本号放如目标文件。
exestr:将commentstring放到目标文件里面。
lib:将查找库的信息放如目标文件里面。此时,必须使用commentstring参数,用于记录lib的名字,最好还包括路径。
            #pragma comment( lib, "emapi" )首先在当前目录底下查找emapi.lib,然后在lib环境变量的路径里面寻找
linker:将linker option放入目标文件里面。通过注释类型确定linker的选项,从而避免在Setting对话框里面进行设置。比如:
           #pragma comment(linker, "/include:__mySymbol")
user:将一般的注释放入到目标文件里面。
#pragma optimize( "[optimization-list]", {on | off} ):
在函数一级对进行优化。该语句必须出现在函数外面,并且只会对该声明后的第一个函数有作用。on或者off确定是否起作用。
Parameter(s)Type of optimization
aAssume no aliasing.
gEnable global optimizations.
pImprove floating-point consistency.
s or tSpecify short or fast sequences of machine code.
wAssume no aliasing across function calls.
yGenerate frame pointers on the program stack.
由于比较简单,上面的英语我就不介绍了!!!调用可以是下面的形式:#pragma optimize( "atp", on )
#pragma function( function1 [, function2, ...] )            #pragma intrinsic(
function1 [, function2, ...] )
以上两个声明确定了所选函数的调用类型。如果有一函数名出现在function的参数里面,则说明以一般函数的形式调用。如果出现在了intrinsic里面则编译器在编译的时候将函数代码转化了inline代码。
#pragma data_seg( ["section-name"[, "section-class"] ] ):
为数据指定默认的存储区。如:
#pragma data_seg( "MY_DATA" )。这句声明将使得在#pramga后申明的数据将在名为MY_DATA存储区里面进行分配。
先介绍到此,告一段落。以后遇到了问题,再来添加!!!
原创粉丝点击