启用HANDLE_PRAGMA_PACK_WITH_EXPANSION

时间:2016-04-26 06:58:22

标签: c gcc pragma

我希望gcc能够处理pack个pragma,如下所示:

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

MSVC默认允许这种构造。

通过-fms-extensions Clang enabled this behavior

在搜索gcc等效项时,我发现了对宏HANDLE_PRAGMA_PACK_PUSH_POPHANDLE_PRAGMA_PACK_WITH_EXPANSION的引用,但即使通过-DHANDLE_PRAGMA_PACK_WITH_EXPANSION=1添加它们或作为环境变量,gcc仍然无效。

如何使gcc表现为MSVC和Clang与-fms-extensions

1 个答案:

答案 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))