Sun Studio 12:C 用户指南

D.1.17 _Pragma

6.10.9 Pragma 操作符

_Pragma ( string-literal ) 形式的一元操作符表达式处理如下:

预处理标记的结果序列作为 pragma 指令中的预处理程序标记进行处理。

删除一元操作符表达式中的最初四个预处理标记。

#pragma 比较,_Pragma 的优势在于:_Pragma 可以用于宏定义。

_Pragma("string") 与 #pragma 字符串行为完全相同。考虑以下示例。首先列出示例的源代码,然后在预处理程序使其通过预处理之后,再列出示例的源代码。


example% cat test.c

#include <omp.h>
#include <stdio.h>

#define Pragma(x) _Pragma(#x)
#define OMP(directive) Pragma(omp directive)

void main()
{
  omp_set_dynamic(0);
  omp_set_num_threads(2);
  OMP(parallel)
  {
  printf("Hello!\n");
  }
}

example% cc test.c -P -xopenmp -x03
example% cat test.i

下面是预处理程序完成后的源代码。


void main()
{
  omp_set_dynamic(0);
  omp_set_num_threads(2);
  # pragma omp parallel
  {
    printf("Hellow!\n");
  }
}

example% cc test.c -xopenmp -->
example% ./a.out
Hello!
Hello!
example%