启用带有扩展的句柄\u PRAGMA\u PACK\u

启用带有扩展的句柄\u PRAGMA\u PACK\u,c,gcc,pragma,C,Gcc,Pragma,我希望gcc处理packpragmas,例如: #define _CTR_PACKING 4 #pragma pack(push, _CRT_PACKING) 默认情况下,MSVC允许这种构造 通过-fms扩展卡发出叮当声 在搜索gcc等价物时,我找到了对宏HANDLE\u PRAGMA\u PACK\u PUSH\u POP和HANDLE\u PRAGMA\u PACK\u WITH\u EXPANSION的引用,但即使通过-DHANDLE\u PRAGMA\u PACK\u EXPANSI

我希望gcc处理
pack
pragmas,例如:

#define _CTR_PACKING 4
#pragma pack(push, _CRT_PACKING)
默认情况下,MSVC允许这种构造

通过
-fms扩展卡发出叮当声

在搜索gcc等价物时,我找到了对宏
HANDLE\u PRAGMA\u PACK\u PUSH\u POP
HANDLE\u PRAGMA\u PACK\u WITH\u EXPANSION
的引用,但即使通过
-DHANDLE\u PRAGMA\u PACK\u EXPANSION=1添加它们,或者作为环境变量,gcc仍然什么都不做


如何使gcc表现为MSVC,并与
-fms extensions
配合使用?

gcc宏
处理带有扩展的\u PRAGMA\u PACK\u
是gcc目标使用的一个宏,用于指示它是否支持PRAGMA指令中的宏扩展,它不是一个动态启用的开关

相反,您可以使用标准C的
\u Pragma
运算符,它将转换为编译器的Pragma指令,并且它支持宏扩展,因为它是语言的一部分。这是一个例子:

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

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

_Pragma(PACKSTR(_CTR_PACKING))