Freigeben über


Pragma-Direktiven und das __Pragma-Schlüsselwort

Pragma-Direktiven geben Sie Computer oder Betriebssystem-spezifische-Compilerfeatures.Die __pragma -Schlüsselwort, das an den Microsoft-Compiler spezifisch ist, können Sie Code Pragma-Direktiven in Makrodefinitionen.

#pragma token-string
__pragma(token-string)

Hinweise

Jede Implementierung von c und C++ unterstützt einige Features, die nur der Host-Computer oder Betriebssystem.Einige Programme müssen beispielsweise präzise Kontrolle über die Speicherbereiche, in denen Daten gelegt wird, oder zu steuern, wie bestimmte Parameter Empfangsfunktionen ausüben.Die #pragma Richtlinien bieten eine Möglichkeit für jeden Computer und Betriebssystem-spezifische Features bieten und gleichzeitig die allgemeine Kompatibilität mit den Programmiersprachen C und C++ Compiler.

Pragmas sind Computer oder Betriebssystem-spezifische Definition und unterscheiden sich in der Regel für jeden Compiler.Pragmas können in bedingten Anweisungen neue Präprozessor Funktionalität bereitstellen, oder zur Implementierung definiert der Compiler verwendet werden.

Die token-string ist eine Reihe von Zeichen, die eine bestimmte Compileranweisung und Argumente gibt, sofern vorhanden.Das Nummernzeichen (#) muss das erste White-Space-Zeichen in der Zeile mit dem Pragma; Leerzeichen können die Zeichen und das Wort "Pragma" trennen.Nach #pragma, alle Texte, die der Übersetzer als Token Vorverarbeitung analysieren kann.Das Argument für #pragma Makroerweiterung unterliegt.

Findet der Compiler eine Pragma, die nicht erkannt wird, gibt eine Warnung aus und setzt die Kompilierung.

Die Microsoft C- und C++-Compiler erkennt die folgenden Pragmas:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comment

component

conform1

const_seg

data_seg

veraltet

detect_mismatch

fenv_access

float_control

fp_contract

Funktion

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrinsic

loop1

make_public

verwaltet

Meldung

omp

einmal

optimize

pack

pragma Pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

Abschnitt

setlocale

strict_gs_check

nicht verwaltete

Vtordisp1

Warnung

1.Nur vom C++-Compiler unterstützt.

Pragmas und Compiler-Optionen

Einige Pragmas bieten die gleiche Funktionalität wie Compileroptionen.Eine Pragma in Source-Code gefunden wird, überschrieben das Verhalten der Compileroption angegeben.Beispielsweise, wenn Sie angegeben /Zp8, Sie können angeben, überschreiben diese Compilereinstellung der für bestimmte Abschnitte des Codes mit Pack:

cl /Zp8 ...

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

__Pragma()-Schlüsselwort

Microsoft-spezifische

Der Compiler unterstützt auch die __pragma -Schlüsselwort, das die gleiche Funktionalität hat als die #pragma Richtlinie kann jedoch verwendete Inline in einer Makrodefinition.Die #pragma Richtlinie kann nicht in einer Makrodefinition verwendet werden, da der Compiler das Anzahl Zeichen (#) in der Richtlinie werden interpretiert die Zeichenfolgenoperator (#).

Im folgenden Codebeispiel wird veranschaulicht, wie die __pragma Schlüsselwort kann in einem Makro verwendet werden.Dieser Code stammt aus dem mfcdual.h-Header in der ACDUAL-Beispiel "Beispiele für Compiler COM Support":

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

Beenden Sie Microsoft-spezifische

Siehe auch

Referenz

C-Pragmen

C++-Schlüsselwörter

Weitere Ressourcen

C/C++-Präprozessorreferenz