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