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:
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