Udostępnij za pośrednictwem


Dyrektywy pragma i słowo kluczowe __Pragma

Dyrektywy pragma określają funkcje kompilatora specyficzne dla maszyny lub systemu operacyjnego.Słowo kluczowe __pragma , które jest specyficzne dla kompilatora Microsoft, umożliwia kodowanie dyrektyw pragma kodu w makrodefinicjach.

#pragma token-string
__pragma(token-string)

Uwagi

Każda implementacja C i C++ obsługuje niektóre funkcje unikatowe dla jego komputera hosta lub systemu operacyjnego.Na przykład, niektóre programy muszą wykonywać precyzyjną kontrolę nad obszarami pamięci, w których umieszczono dane lub kontrolować sposób uzyskiwania parametrów przez niektóre funkcje.Dyrektywa #pragma oferuje sposób, by każdy kompilator oferował funkcje specyficzne dla komputera i systemu operacyjnego przy zachowaniu ogólnej kompatybilności z językami C i C++.

Dyrektywy pragma zgodnie z definicją są specyficzne dla maszyny lub systemu operacyjnego i są zazwyczaj inne dla każdego kompilatora.Dyrektyw pragma można używać w instrukcjach warunkowych, aby dostarczyć nowe funkcje preprocesora lub informacje zdefiniowane w implementacji do kompilatora.

token-string to seria znaków dająca konkretną instrukcję kompilatora i argumenty, jeżeli występują.Znak liczby (#) musi być pierwszym niebiałym znakiem oddzielającym na linii, która zawiera dyrektywę; białe znaki oddzielające mogą oddzielać znak liczby i słowo „dyrektywa".Po #pragma wpisz dowolny tekst, który translator można analizować jako przetworzone wstępnie tokeny.Argument do #pragma podlega rozwinięciu makra.

Jeśli kompilator znajdzie pragmę, której nie rozpoznaje, wyświetla ostrzeżenie i kontynuuje kompilację.

Kompilatory Microsoft C i C++ rozpoznają następujące pragmy:

alloc_text

auto_inline

bss_seg

zaznacz stos

code_seg

komentarz

składnik

dosposuj1

const_seg

data_seg

przestarzałe

detect_mismatch

fenv_access

float_control

fp_contract

Funkcja

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

wewnętrzne

pętla1

make_public

zarządzany

wiadomość

omp

raz

optymalizuj

pakiet

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

sekcja

setlocale

strict_gs_check

niezarządzana

vtordisp1

wstrzeżenie

1.Obsługiwane tylko przez kompilator C++.

Opcje kompilatora i dyrektyw pragma

Niektóre informacje pragmatyczne zapewniają taką samą funkcjonalność jak opcje kompilatora.Kiedy w kodzie źródłowym odnaleziono pragmę, zastępuje ona zachowanie określone przez opcję kompilatora.Jeśli na przykład określisz /Zp8, możesz zastąpić to ustawienie kompilatora dla poszczególnych sekcji kodu za pomocą pakietu:

cl /Zp8 ...

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

Słowo kluczowe __pragma()

specyficzne dla firmy Microsoft

Kompilator obsługuje również słowo kluczowe __pragma, które ma taką samą funkcjonalność jak #pragma dyrektywy, ale może być używane jako wbudowane w definicję makra.Dyrektywy #pragma nie można użyć w definicji makra, ponieważ kompilator zinterpretuje znak numeru (#) w dyrektywie jako operator tworzenia ciągu (#).

Poniższy przykład kodu demonstruje sposób skorzystania ze słowa kluczowego __pragma, w makro.Ten kod jest wyszczególniony z nagłówka mfcdual.h w przykładzie ACDUAL w „Przykładach obsługi kompilatora 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; \

Koniec specyficzny dla firmy Microsoft

Zobacz też

Informacje

Pragma — dyrektywy języka C

Słowa kluczowe języka C++

Inne zasoby

Odwołania preprocesora języka C/C++