6.10.9 プラグマ演算子
_Pragma ( string-literal ) という形式の単項演算子の式は、次のように処理されます。
文字列定数の L 接頭辞がある場合は削除されます。
前および後ろの二重引用符は削除されます。
エスケープシーケンス ' は、二重引用符に置換されます。
エスケープシーケンス \\ は、1 つの \ に置換されます。
生成されたプリプロセッサトークンのシーケンスは、プラグマの指令でのプリプロセッサトークンと同様に処理されます。
単項演算子の式にある元の 4 つのプリプロセッサトークンは削除されます。
_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% |