Sdílet prostřednictvím


Direktivy Pragma a klíčové slovo __Pragma

Direktivy Pragma určují funkce kompilátoru závislé na počítači nebo operačním systému.Klíčové slovo __pragma, které je specifické pro kompilátor společnosti Microsoft, umožňuje kódovat direktivy pragma v rámci definice maker.

#pragma token-string
__pragma(token-string)

Poznámky

Každá implementace jazyka C a C++ podporuje některé funkce, které jsou jedinečné pro daný hostitelský počítač nebo operační systém.Některé programy musí například vykonávat přesnou kontrolu paměťových oblastí pro ukládání dat, nebo způsob, jak některé funkce přijímají parametry.Direktivy #pragma představují způsob, jakým každý kompilátor nabízí funkce závislé na počítači a operačním systému při zachování celkové kompatibility s jazyky C a C++.

Pragma jsou závislé na počítači nebo operačním systému a obvykle se různí pro každý kompilátor.Pragma lze použít jako podmíněné příkazy a poskytnout tak preprocesoru nové funkce, nebo poskytnout kompilátoru informace definované implementací.

token-string je posloupnost znaků, které poskytuje specifickému kompilátoru instrukce a argumenty, pokud existují.Znak čísla (#) musí být prvním nemezerovým znakem na řádku, který obsahuje pragma; mezerové znaky mohou oddělit znak čísla a slovo „pragma“.Po #pragma napište libovolný text, který dokáže překladač analyzovat jako tokeny předzpracování.Argument #pragma se řídí podle rozšíření makra.

Pokud kompilátor najde pragma, které nebylo rozpoznáno, upozorní a pokračuje v kompilaci.

Kompilátory Microsoft C a C++ rozpoznají následující Pragma:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

komentář

součást

odpovídat1

const_seg

data_seg

zastaralé

detect_mismatch

fenv_access

float_control

fp_contract

funkce

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

vnitřní

smyčka1

make_public

spravované

zpráva

omp

once

optimalizovat

balík

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

oddíl

setlocale

strict_gs_check

nespravované

vtordisp1

upozornění

1.Podporováno pouze v kompilátoru jazyka C++.

Pragma a možnosti kompilátoru

Některé prvky pragma poskytují stejné funkce, jaké poskytují možnosti kompilátoru.Pokud se pragma vyskytne ve zdrojovém kódu, potlačí chování určené jinou možností kompilátoru.Například, pokud jste zadali /Zp8, můžete přepsat toto nastavení kompilátoru pro určité části kódu pomocí pack:

cl /Zp8 ...

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

Klíčové slovo __pragma()

Specifické pro Microsoft

Kompilátor podporuje také klíčové slovo __pragma, které má stejnou funkci, jako direktiva #pragma, ale které lze používat vložené v definici makra.Direktivu #pragma nelze použít v definici makra, protože kompilátor interpretuje znaménko pro číslo ('#') v direktivě, jako operátor pro definici řetězce (#).

Následující příklad kódu ukazuje, jak lze klíčové slovo __pragma použít v makru.Tento kód je výňatkem z hlavičky mfcdual.h ve vzorku ACDUAL v "Vzorky podpory kompilátoru 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; \

Specifické pro End Microsoft

Viz také

Referenční dokumentace

Pragmas jazyka C

Klíčová slova jazyka C++

Další zdroje

C/C++ – referenční dokumentace preprocesoru