2016-04-26 12 views
1

Ich mag würde gcc pack Pragmas wie die folgenden verarbeiten:Aktivieren HANDLE_PRAGMA_PACK_WITH_EXPANSION

#define _CTR_PACKING 4 
#pragma pack(push, _CRT_PACKING) 

MSVC diese Art von Konstruktion standardmäßig erlaubt.

Clang enabled this behavior über -fms-extensions.

für eine gcc Äquivalent Suche, fand ich Verweise auf Makros HANDLE_PRAGMA_PACK_PUSH_POP und HANDLE_PRAGMA_PACK_WITH_EXPANSION, sondern auch nach ihnen über -DHANDLE_PRAGMA_PACK_WITH_EXPANSION=1 oder als Umgebungsvariablen hinzufügen, gcc tut immer noch nichts.

Wie kann ich gcc als MSVC und Clang mit -fms-extensions verhalten?

Antwort

1

Das gcc-Makro HANDLE_PRAGMA_PACK_WITH_EXPANSION ist ein Makro, das von gcc target verwendet wird, um anzugeben, ob es die Erweiterung von Makros in der pragma-Direktive unterstützt. Es ist kein aktivierbarer Switch.

Stattdessen können Sie Standard-C-_Pragma-Operator verwenden, es in die Pragma-Direktiven des Compilers übersetzen, und es unterstützt Makro-Erweiterung, da es ein Teil der Sprache ist. Dies ist ein Beispiel:

#define STR(s) #s 
#define _CTR_PACKING 1 

#define PACKSTR(x) STR(pack(x)) 

_Pragma(PACKSTR(_CTR_PACKING))