使用Visual Studio或gcc,如果我有
#pragma pack(push, 16)
typedef std::map<uint32_t, uint32_t> MyIntMap;
#pragma pack(pop)
然后:
#pragma pack(push, 8)
MyIntMap thisInstance;
#pragma pack(pop)
thisInstance的结构对齐方式是什么?也就是说,对于typedef的模板类,pragma pack是在typedef的位置还是在变量定义的位置生效?如果是后者,那么获得跨文件一致对齐类型的好方法是什么?
答案 0 :(得分:4)
在您的代码中,#pragma pack
无效。它只对结构或类的定义有效,而不是在typedef或任何东西周围。它也不会对变量定义产生任何影响。
您可以在此处查看用法:http://msdn.microsoft.com/en-us/library/2e70t5y1(v=VS.100).aspx
具体做法是:
pack在看到pragma之后在第一个struct,union或class声明生效。 pack对定义没有影响。