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