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% |