我希望gcc能够处理pack
个pragma,如下所示:
#define _CTR_PACKING 4
#pragma pack(push, _CRT_PACKING)
MSVC默认允许这种构造。
通过-fms-extensions
Clang enabled this behavior。
在搜索gcc等效项时,我发现了对宏HANDLE_PRAGMA_PACK_PUSH_POP
和HANDLE_PRAGMA_PACK_WITH_EXPANSION
的引用,但即使通过-DHANDLE_PRAGMA_PACK_WITH_EXPANSION=1
添加它们或作为环境变量,gcc仍然无效。
如何使gcc表现为MSVC和Clang与-fms-extensions
?
答案 0 :(得分:1)
gcc宏HANDLE_PRAGMA_PACK_WITH_EXPANSION
是gcc目标使用的一个宏,用于指示它是否支持在pragma指令中扩展宏,它不是一个即时启用的开关。
相反,您可以使用标准C的_Pragma
运算符,它转换为编译器的pragma指令,并且它支持宏扩展,因为它是语言的一部分。这是一个例子:
#define STR(s) #s
#define _CTR_PACKING 1
#define PACKSTR(x) STR(pack(x))
_Pragma(PACKSTR(_CTR_PACKING))