不同的主机和操作系统都有其特点。为了利用好这些特点,c和c++的编译器必须能够针对不同的特性进行处理。比方说,有些程序需要准确地对内存进行管理(如应当将数据存放到哪里)或者需要指定函数接受参数的方式。#pragma指示器便用于此处!通过#pragma,我们的c和c++程序即可以保证兼容性也可以利用到低层系统的特色!
语法规则: #pragma token-string
其中token-string给出了特定的编译指令和参数。
利用条件申明,pragma可以提供预处理功能和对编译器进行定制。c和c++可以识别以下pragma:
alloc_text | comment | init_seg1 | optimize |
auto_inline | component | inline_depth | pack |
bss_seg | data_seg | inline_recursion | pointers_to_members1 |
check_stack | function | intrinsic | setlocale |
code_seg | hdrstop | message | vtordisp1 |
const_seg | include_alias | once | warning |
#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 |
a | Assume no aliasing. |
g | Enable global optimizations. |
p | Improve floating-point consistency. |
s or t | Specify short or fast sequences of machine code. |
w | Assume no aliasing across function calls. |
y | Generate frame pointers on the program stack. |
#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存储区里面进行分配。
先介绍到此,告一段落。以后遇到了问题,再来添加!!!