Oracle Solaris Studio 12.2: C ユーザーガイド

D.1.17 _Pragma

6.10.9 プラグマ演算子

_Pragma ( string-literal ) という形式の単項演算子の式は、次のように処理されます。

生成されたプリプロセッサトークンのシーケンスは、プラグマの指令でのプリプロセッサトークンと同様に処理されます。

単項演算子の式にある元の 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%