Udostępnij za pośrednictwem


Dyrektywy pragma i __Pragma słowa kluczowego

Dyrektywy pragma określić funkcje kompilatora lub operacyjne dotyczące komputera.__pragma Słowa kluczowego, które jest specyficzne dla kompilatora Microsoft, umożliwia dyrektywy pragma kodu w definicjach makr.

#pragma token-string
__pragma(token-string)

Uwagi

Każda implementacja c i C++ obsługuje niektóre funkcje unikatowe systemu operacyjnego lub komputera-hosta.Na przykład, niektóre programy muszą wykonywać precyzyjną kontrolę nad obszary pamięci, w którym jest wprowadzane dane lub do kontrolowania niektórych funkcji parametry odbierania.#pragma Dyrektyw oferuje sposób dla każdego kompilatorowi oferują funkcje specyficzne dla komputera i systemu operacyjnego, zachowując ogólną zgodność z języków c i C++.

Pragmas są specyficzne komputera lub systemu operacyjnego, które z definicji i są zazwyczaj inny dla każdego kompilatora.W instrukcji warunkowych można Pragmas nowych funkcji preprocesora lub dostarczania informacji kompilator zdefiniowane w implementacji.

token-string Jest ciąg znaków daje instrukcji określonych kompilatora i argumentów, jeśli.Znak numeru (#) musi być pierwszym znakiem bez spacji w wierszu, która zawiera pragma; znaki spacji można oddzielić znak numeru i wyraz "pragma".Po #pragma, zapisać dowolny tekst, który translatora można analizować jako wstępnego przetwarzania tokenów.Argument dla #pragma podlega rozwinięciu makra.

Jeśli kompilator znajdzie pragma, która nie rozpoznaje, ostrzeżenia i kontynuuje kompilacji.

Kompilatorów Microsoft C i C++ rozpoznaje następujące pragmas:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

komentarz

składnik

conform1

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

loop1

make_public

zarządzane

wiadomości

OMP

raz

Optymalizacja

Service Pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

sekcja

setLocale

strict_gs_check

niezarządzany

vtordisp1

Ostrzeżenie

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

Opcje kompilatora i Pragmas

Niektóre pragmas zapewniają taką samą funkcjonalność jak opcje kompilatora.Po napotkaniu pragmy w kodzie źródłowym zastępuje zachowanie określone przez opcję kompilatora.Na przykład, jeśli określono /Zp8, można zastąpić to ustawienie kompilatora dla poszczególnych sekcji kodu z pack:

cl /Zp8 ...

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

__Pragma() kluczowe

Microsoft szczególne

Kompilator obsługuje również __pragma słowa kluczowego, który ma taką samą funkcjonalność jako #pragma dyrektywy, ale mogą być używane wbudowane w definicji makra.#pragma Dyrektywy nie można używać w definicji makra, ponieważ kompilator zinterpretuje znak numeru (#) w niniejszej dyrektywie za stringizing operatora (#).

Poniższy przykład kodu pokazuje jak __pragma można użyć słowa kluczowego, w makrze.Ten kod jest fragmentem nagłówka mfcdual.h w próbce ACDUAL w "Przykłady obsługi COM kompilator":

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

Zakończenie programu Microsoft

Zobacz też

Informacje

C Pragmas

Słów kluczowych języka C++

Inne zasoby

C i C++ preprocesora odniesienia