プラグマのディレクティブと __Pragma のキーワード

プラグマ ディレクティブは、マシンまたは操作に固有のコンパイラ機能を指定します。__pragma 、Microsoft のコンパイラに固有であり、キーワードを使用すると、コードのプラグマ ディレクティブでマクロ定義をします。

#pragma token-string
__pragma(token-string)

解説

C および C++ の各実装は、ホスト コンピューターまたはオペレーティング システムに固有のいくつかの機能をサポートしています。一部のプログラムは正確なコントロールのデータが格納されるメモリ領域または特定の関数にパラメーターが表示される方法を制御するなどの練習する必要があります。#pragmaディレクティブの各コンパイラは、C および C++ 言語の全体的な互換性を維持しながら、コンピューターおよびオペレーティング システムに固有の機能を提供する手段を提供します。

プラグマはマシンやオペレーティング システムに固有であると定義され、すべてのコンパイラは、通常、異なるです。プラグマは条件付きステートメントでは、プリプロセッサの新機能を提供するために、または、コンパイラ実装で定義された情報を提供するために使用できます。

token-stringは、特定のコンパイラ命令および引数では、一連の文字が存在する場合です。シャープ記号 (#) プラグマを含む行の最初の空白以外の文字でなければなりません。 空白文字はシャープ記号と単語「プラグマ」を分割できます。次の#pragma、トークンの前処理として、翻訳者が解析できる任意のテキストを記述します。引数#pragmaマクロの展開されることです。

コンパイラが認識できないプラグマが検出されると、警告メッセージが表示し、コンパイルを続行します。

Microsoft C および C++ のコンパイラは、次のプラグマを認識します。

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comment

コンポーネント

conform1

const_seg

data_seg

非推奨

detect_mismatch

fenv_access

float_control

fp_contract

機能性

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrinsic

loop1

make_public

管理

message

omp

1 回

optimize

pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

セクション

setlocale

strict_gs_check

アンマネージ

vtordisp1

警告

1.C コンパイラによってのみをサポートします。

プラグマ、コンパイラのオプション

一部のプラグマはコンパイラ オプションと同じ機能を提供します。ソース コードで、プラグマが見つかると、コンパイラのオプションで指定された動作より優先されます。たとえば、指定した /Zp8、このコンパイラ設定を使用してコードの特定のセクションをオーバーライドすることができます パック

cl /Zp8 ...

<file> - packing is 8
// ...
#pragma pack(push, 1) - packing is now 1
// ...
#pragma pack(pop) - packing is 8
</file>

__Pragma() キーワード

マイクロソフトの特定

コンパイラもサポートしています、 __pragmaと同じ機能を持つキーワードとして、 #pragmaディレクティブが使われるインライン マクロの定義内で指定できます。#pragmaディレクティブに、ディレクティブのシャープ記号 ('#') コンパイラを解釈するため、マクロ定義で使用できません、 演算子 (#) を文字列

次のコード例に示します、 __pragmaマクロで、キーワードを使用できます。このコードは、mfcdual.h ヘッダーの ACDUAL サンプルでは、「コンパイラ COM サポートのサンプル」から抜粋したものです。

#define CATCH_ALL_DUAL \
CATCH(COleException, e) \
{ \
_hr = e->m_sc; \
} \
AND_CATCH_ALL(e) \
{ \
__pragma(warning(push)) \
__pragma(warning(disable:6246)) /*disable _ctlState prefast warning*/ \
AFX_MANAGE_STATE(pThis->m_pModuleState); \
__pragma(warning(pop)) \
_hr = DualHandleException(_riidSource, e); \
} \
END_CATCH_ALL \
return _hr; \

特定の Microsoft を終了します。

参照

関連項目

C のプラグマ

C++ のキーワード

その他の技術情報

C/C++ プリプロセッサの参照