6.10.9 Pragma operator
A unary operator expression of the form: _Pragma ( string-literal ) is processed as follows:
The L prefix of the string literal is deleted, if it is present.
The leading and trailing double-quotes are deleted.
Each escape sequence ’ is replaced by a double-quote.
Each escape sequence \\ is replaced by a single backslash.
The resulting sequence of preprocessing tokens are processed as if they were the preprocessor tokens in a pragma directive.
The original four preprocessing tokens in the unary operator expression are removed.
_Pragma offers an advantage over #pragma in that _Pragma can be used in a macro definition.
_Pragma("string") behaves exactly the same as #pragma string. Consider the following example. First, the example’s source code is listed and then the example’s source is listed after the preprocessor has made it’s pass.
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 |
Here’s the source after the preprocessor has finished.
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% |