Oracle® Developer Studio 12.5: C++ ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

プラグマ

この付録では、プラグマについて説明します。プラグマとは、プログラマがコンパイラに特定の情報を渡すために使用するコンパイラ指令です。プラグマを使用すると、コンパイル内容を詳細に渡って制御できます。たとえば、pack プラグマを使用すると、構造体の中のデータの配置を変えることができます。プラグマはディレクティブとも呼ばれます。

プリプロセッサキーワード pragma は C++ 標準の一部ですが、書式、内容、および意味はコンパイラごとに異なります。プラグマは C++ 標準には定義されていません。


注 - したがってプラグマに依存するコードには移植性はありません。プラグマに依存するコードは移植性がありません。

B.1 プラグマの書式

次に、C++ コンパイラのプラグマのさまざまな書式を示します。

#pragma keyword
#pragma keyword ( a [ , a ] ...) [ , keyword ( a [ , a ] ...) ] ,...
#pragma sun keyword

変数 keyword は特定の指令を示し、a は引数を示します。

B.1.1 プラグマの引数としての多重定義関数

ここで示すいくつかのプラグマは、引数として関数名をとります。その関数が多重定義されている場合、プラグマは、その引数として、その直前の関数宣言を使用します。次の例を考えてみましょう。

int bar(int);
int foo(int);
int foo(double);
#pragma does_not_read_global_data(foo, bar)

この例の foo は、プラグマの直前の foo の宣言である foo(double) を意味し、bar は、単に宣言されている bar である bar(int) を意味します。ここで、foo が再び多重定義されている次の例を考えてみます。

int foo(int);
int foo(double);
int bar(int);
#pragma does_not_read_global_data(foo, bar)

この例の bar は、単に宣言されている bar である bar(int) を意味します。しかし、プラグマは、どのバージョンの foo を使用すべきか分かりません。この問題を解決するには、プラグマが使用すべき foo の定義の直後にプログラムを置く必要があります。

次のプラグマは、このセクションで説明した方法で選択を行います。

  • does_not_read_global_data

  • does_not_return

  • does_not_write_global_data

  • no_side_effect

  • opt

  • rarely_called

  • returns_new_memory