1
 #pragma pack(push)
 #pragma pack(1)

我下载了一个教程,它在头文件中有这些行。如果你们能提供与此相关的任何教程或参考资料,我将不胜感激。

4

3 回答 3

3

微软的解释:

http://msdn.microsoft.com/en-us/library/aa273913(v=vs.60).aspx

IBM 的 AIX xlC 解释:

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Frnpgpack.htm

基本上,它决定了存储结构或联合时将使用的字节边界。push/pop 充当在堆栈上存储和检索这些设置的一种方式。

为了将来参考,您可以通过在网络上搜索您要询问的关键字来节省一些时间。为了找到这些信息,我所做的只是在http://www.google.com上搜索“pragma pack”

于 2011-06-15T04:45:00.033 回答
2

所有#pragma声明都是特定于供应商的。

这是 Microsoft 特定的,并描述了编译器可以添加多少“打包”(以字节为单位)以structs 更好地对齐。

简单地保存和以前的#pragma pack(push)设置在堆栈中。然后,您可以更改某个代码块的打包条件,然后#pragma pack(pop)恢复以前的设置。

于 2011-06-15T05:02:05.627 回答
1

它是 MSVC++ 特定的包装说明符。您可以从文档中准确了解它的作用。

打包更改了允许编译器在给定结构(或类)的数据成员之间插入多少填充以保持对齐。在网络代码的情况下,#pragma pack可能会使用说明符,以便可以将结构转换为char*void*传递给某些网络 API,以便一次通过网络发送整个结构。

(注意这是不安全的,因为不同的机器有不同的对齐和字节顺序规则;这只有在线路两端的两台机器使用相同的硬件类型时才有效)

于 2011-06-15T04:38:30.547 回答