共用方式為


Pragma 指示詞 」 和 「 __Pragma 關鍵字

Pragma 指示詞會指定電腦或操作特定編譯器功能。 __pragma關鍵字,也就是專屬於 Microsoft 編譯器,可讓您以程式碼在巨集定義中的 pragma 指示詞。

#pragma token-string
__pragma(token-string)

備註

每個 c 和 C++ 的實作會支援它的主機電腦或作業系統所特有的某些功能。 例如,某些程式中,必須運用上放置資料的記憶體區域,或控制某些函式會接收參數的方式,精確的控制。 #pragma指示詞會提供一個方法,讓每個編譯器可以提供機器和作業系統專屬的功能,同時又保留與 c 和 C++ 語言的整體相容性。

Pragma 電腦作業系統特定或根據定義,並且也通常是不同的每個編譯器。 Pragma 可用在條件陳述式,以提供新的前置處理器功能,或提供給編譯器實作定義的資訊。

token-string是一系列的字元,以提供特定的編譯器指令和引數,如果有的話。 數字符號 (#) 必須是包含 pragma ; 那一行上的第一個非空格字元 數字符號和"pragma"這個字的泛空白字元可以區隔。 遵循#pragma,撰寫轉換程式可剖析成語彙基元的前置處理作業的任何文字。 引數為#pragma受限於巨集展開。

如果編譯器發現無法辨識的 pragma,它會發出警告,並會繼續編譯。

Microsoft c 和 C++ 編譯器會辨識下列 pragma:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comment

元件

conform1

const_seg

data_seg

已取代

detect_mismatch

fenv_access

float_control

fp_contract

function

>hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrinsic

loop1

make_public

管理

message

omp

一次

optimize

pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

區段

setlocale

strict_gs_check

不受管理

vtordisp1

Warning - 警告

1. 僅支援 C++ 編譯器。

Pragma,編譯器選項

某些程式結合提供相同的功能與編譯器選項。 在原始程式碼中發生的 pragma 時,它會覆寫指定的編譯器選項的行為。 比方說,如果您指定 /Zp8,您可以覆寫的程式碼的特定部分的編譯器設定 封包

cl /Zp8 ...

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

__Pragma() 關鍵字

特定的 Microsoft

編譯器也支援__pragma關鍵字具有相同的功能,可做為#pragma指示詞,但可能會使用的內嵌在巨集定義中。 #pragma指示詞不能用在巨集定義,因為編譯器會將數字符號字元 ('#') 解譯為指示詞中字串化運算子 (#)

下列程式碼範例會示範如何__pragma可以在巨集中使用關鍵字。 這段程式碼節錄了一部分從 mfcdual.h 中的標頭中"編譯器 COM 支援範例"ACDUAL 範例:

#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++ 前置處理器的參考