6.10.9 Pragma 操作符
_Pragma ( string-literal ) 形式的一元操作符表达式处理如下:
如果字符串文字具有 L 前缀,则删除该前缀。
删除前导和结尾双引号。
用双引号替换每个换码序列 '。
用单个反斜杠替换每个换码序列 \\。
预处理标记的结果序列作为 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%
|