2016-04-26 4 views
1

私は、gccは、次のようなpackプラグマを処理したいと思います:有効HANDLE_PRAGMA_PACK_WITH_EXPANSION

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

MSVCは、デフォルトではこの種の構造を可能にします。

クランenabled this behaviorから-fms-extensionsまでです。

HANDLE_PRAGMA_PACK_PUSH_POPHANDLE_PRAGMA_PACK_WITH_EXPANSIONの参照を見つけましたが、それらを-DHANDLE_PRAGMA_PACK_WITH_EXPANSION=1または環境変数として追加した後でも、gccは何もしません。

gccはMSVCとして動作し、Clangは-fms-extensionsとするにはどうすればよいですか?

答えて

1

gccマクロHANDLE_PRAGMA_PACK_WITH_EXPANSIONは、gcc targetがプラグマディレクティブでマクロの展開をサポートしているかどうかを示すためにgcc targetが使用するマクロで、オンザフライで有効にするスイッチではありません。

代わりに、標準Cの_Pragma演算子を使用すると、コンパイラのプラグマディレクティブに変換され、言語の一部であるためマクロ拡張がサポートされます。これは例です:

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

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

_Pragma(PACKSTR(_CTR_PACKING))