目前我有一个程序需要为众多功能打包属性。代码必须可在 Windows Visual Studio C++ 和 GCC C++ 之间互换。目前它很难阅读,我想用 C++ 宏来清理它,但是,我注意到在我使用一次宏之后,下一行代码退出当前命名空间。有没有办法来解决这个问题?这是类似于我正在处理的示例代码和问题的图像。
#if defined(_WIN32) || defined(_WIN64)
#define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop))
#else
#define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))
#endif
namespace test {
PACK(typedef struct temp1 {
int a;
int b;
});
PACK(typedef struct temp2 {
int c;
int d;
});
}
在 Visual Studio 中,当我的光标位于第一个结构中时,VS 显示它在名称空间测试中,但是,在全局名称空间中的第二个。关于什么可以解决这个问题的任何想法?
到目前为止,我的结构看起来更像下面的代码,它可以工作,但它使阅读变得更加困难,尤其是使用 100 多个这样的打包结构。
#define PACK __attribute__((__packed__))
namespace test {
#if defined(_WIN32) || defined(_WIN64)
#pragma pack(push, 1)
#endif
typedef struct temp1 {
int a;
int b;
}
#if defined(_WIN32) || defined(_WIN64)
temp2;
#pragma pack(pop)
#else
PACK temp2;
#endif
#if defined(_WIN32) || defined(_WIN64)
#pragma pack(push, 1)
#endif
typedef struct temp2 {
int c;
int d;
}
#if defined(_WIN32) || defined(_WIN64)
temp2;
#pragma pack(pop)
#else
PACK temp2;
#endif
}