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