Oracle® Developer Studio 12.5:C++ 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

Pragma

本附录介绍了 C++ 编译器 pragma。pragma 是一个编译器指令,程序员可以通过它向编译器提供额外的信息。该信息可以更改您所控制的编译详细信息。例如,pack pragma 会影响结构内的数据布局。编译器 pragma 也称为指令

预处理程序关键字 pragma 是 C++ 标准的一部分,但每个编译器中,pragma 的形式、内容和含义都是不相同。C++ 标准不定义任何 pragma。


注 - 依赖于 pragma 的代码是不可移植的。

B.1 Pragma 形式

C++ 编译器 pragma 的各种形式如下所示:

#pragma keyword
#pragma keyword ( a [ , a ] ...) [ , keyword ( a [ , a ] ...) ] ,...
#pragma sun keyword

变量 keyword 指特定指令;a 表示参数。

B.1.1 将函数作为 pragma 参数进行重载

本附录中列出了几个将函数名称作为参数的 pragma。如果重载该函数,则 pragma 使用其前面的函数声明作为其参数。请看以下示例:

int bar(int);
int foo(int);
int foo(double);
#pragma does_not_read_global_data(foo, bar)

在此示例中,foofoo(double),即 pragma 紧前面的 foo 声明;而 barbar(int),即唯一声明的 bar。现在,请看以下示例,在此示例中再次重载了 foo

int foo(int);
int foo(double);
int bar(int);
#pragma does_not_read_global_data(foo, bar)

在此示例中,barbar(int),即唯一声明的 bar。但 pragma 并不知道要使用哪个版本的 foo。要更正此问题,必须将 pragma 放在希望 pragma 使用的 foo 定义的紧后面。

以下 pragma 使用本节中介绍的选择方法:

  • does_not_read_global_data

  • does_not_return

  • does_not_write_global_data

  • no_side_effect

  • opt

  • rarely_called

  • returns_new_memory