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