#pragma pack(push)
#pragma pack(1)
我下载了一个教程,它在头文件中有这些行。如果你们能提供与此相关的任何教程或参考资料,我将不胜感激。
#pragma pack(push)
#pragma pack(1)
我下载了一个教程,它在头文件中有这些行。如果你们能提供与此相关的任何教程或参考资料,我将不胜感激。
微软的解释:
http://msdn.microsoft.com/en-us/library/aa273913(v=vs.60).aspx
IBM 的 AIX xlC 解释:
基本上,它决定了存储结构或联合时将使用的字节边界。push/pop 充当在堆栈上存储和检索这些设置的一种方式。
为了将来参考,您可以通过在网络上搜索您要询问的关键字来节省一些时间。为了找到这些信息,我所做的只是在http://www.google.com上搜索“pragma pack”
所有#pragma
声明都是特定于供应商的。
这是 Microsoft 特定的,并描述了编译器可以添加多少“打包”(以字节为单位)以struct
s 更好地对齐。
简单地保存和以前的#pragma pack(push)
设置在堆栈中。然后,您可以更改某个代码块的打包条件,然后#pragma pack(pop)
恢复以前的设置。
它是 MSVC++ 特定的包装说明符。您可以从文档中准确了解它的作用。
打包更改了允许编译器在给定结构(或类)的数据成员之间插入多少填充以保持对齐。在网络代码的情况下,#pragma pack
可能会使用说明符,以便可以将结构转换为char*
或void*
传递给某些网络 API,以便一次通过网络发送整个结构。
(注意这是不安全的,因为不同的机器有不同的对齐和字节顺序规则;这只有在线路两端的两台机器使用相同的硬件类型时才有效)