#pragma disjoint
适用的调用
| 编译指示 (pragma) | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
|---|---|---|---|---|
#pragma disjoint |
✓ | ✓ | ✓ | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
用途
列出未在其使用范围内彼此互为别名的标识。
通过通知编译器,编译指示中列出的标识都不共享相同的物理存储器,编译指示提供了更多优化机会。
语法
参数
- variable_name
- 变量的名称。 不得引用以下任何内容:
- 结构,类 或并集的成员
- 结构,并集或枚举标记
- 枚举常量
typedef名称- 标签
使用量
#pragma disjoint 伪指令断言编译指示中列出的任何标识都不会共享物理存储器; 如果任何标识 do 实际共享物理存储器,那么编译指示可能会产生不正确的结果。
pragma 可以
出现在源程序中允许声明的任何位置,而
声明只能出现在函数或块的作用域中
。 伪指令中的标识必须在编译指示出现的程序中的位置可见。
必须先声明标识,然后才能在编译指示中使用这些标识。 程序在出现在伪指令中之前,不得在标识列表中取消引用指针,也不得将其用作函数自变量。
-qignprag 编译器选项可以禁用此实用程序。
示例
以下示例显示了如何使用 #pragma disjoint。
int a, b, *ptr_a, *ptr_b;
one_function()
{
#pragma disjoint(*ptr_a, b) /* *ptr_a never points to b */
#pragma disjoint(*ptr_b, a) /* *ptr_b never points to a */
b = 6;
*ptr_a = 7; /* Assignment will not change the value of b */
another_function(b); /* Argument "b" has the value 6 */
}外部指针 ptr_a 不与外部变量 b共享存储器,也从不指向外部变量。 因此,将 7 分配给 ptr_a 点所指向的对象不会更改 b的值。 同样,外部指针 ptr_b 不与外部变量 a共享存储器,也从不指向外部变量。 编译器可以假定 another_function 的自变量具有值 6 ,并且不会从内存重新装入该变量。