Condividi tramite


Direttive pragma e la parola chiave di __Pragma

Le direttive pragma specificano funzionalità del compilatore o operative specifiche del computer.Il __pragma parola chiave, che è specifico per il compilatore di Microsoft, consente di direttive pragma del codice all'interno delle definizioni di macro.

#pragma token-string
__pragma(token-string)

Note

Ogni implementazione di c e C++ supporta alcune funzionalità univoche per il computer host o il sistema operativo.Alcuni programmi, ad esempio, devono esercitare un controllo preciso sulle aree di memoria in caso di immissione di dati o per controllare il modo in cui alcune funzioni di ricevano i parametri.Il #pragma direttive offrono un modo per ogni compilatore offrire funzionalità specifiche del computer e del sistema operativo mantenendo la compatibilità generale con i linguaggi c e C++.

Pragma sono o sistema operativo-specifiche del computer per definizione e in genere differenti per ogni compilazione.Pragma possono essere utilizzati in istruzioni condizionali, per fornire nuove funzionalità per il preprocessore o per fornire informazioni definite dall'implementazione del compilatore.

Il token-string è una serie di caratteri che fornisce un'istruzione del compilatore specifico e gli argomenti, se presente.Il simbolo di cancelletto (#) deve essere il primo carattere lo spazio vuoto sulla riga che contiene il pragma. caratteri di spazio possono separare il simbolo di numero e la parola "pragma".Dopo #pragma, scrivere qualsiasi testo che il traduttore può essere analizzato come token di pre-elaborazione.L'argomento di #pragma è soggetto a espansione della macro.

Se il compilatore rileva un pragma riconosciuta, verrà generato un avviso e continua la compilazione.

I compilatori Microsoft C e C++ in grado di riconoscere i pragma elencati di seguito:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comment

componente

conform1

const_seg

data_seg

obsoleto

detect_mismatch

fenv_access

float_control

fp_contract

funzione

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrinsic

loop1

make_public

gestito

messaggio

omp

una volta

optimize

pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

sezione

setlocale

strict_gs_check

non gestito

vtordisp1

avviso

1.Supportato solo dal compilatore C++.

Pragma e le opzioni del compilatore

Alcuni pragma fornisce la stessa funzionalità come le opzioni del compilatore.Quando viene rilevato un pragma nel codice sorgente esegue l'override del comportamento specificato dall'opzione del compilatore.Ad esempio, se è stato specificato /Zp8, è possibile eseguire l'override di questa impostazione del compilatore per sezioni specifiche del codice con pack:

cl /Zp8 ...

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

La parola chiave __pragma()

Specifiche di Microsoft

Il compilatore supporta inoltre la __pragma parola chiave, che ha la stessa funzionalità come il #pragma direttiva, ma può essere utilizzato inline in una definizione di macro.Il #pragma direttiva non può essere utilizzata in una definizione di macro perché il compilatore interpreta il carattere segno numero (#) nella direttiva per essere la operatore di concatenamento (#).

Nell'esempio di codice riportato di seguito viene illustrato come il __pragma parola chiave può essere utilizzato in una macro.Questo codice è stato estratto dalla testata mfcdual.h nell'esempio ACDUAL in "Esempi di supporto COM del compilatore":

#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; \

Fine specifico di Microsoft

Vedere anche

Riferimenti

Pragma di C

Parole chiave C++

Altre risorse

Riferimento del preprocessore C/C++