"#pragma pack"在网络编程中的作用是什么

What is `#pragma pack` for in network programming?

本文关键字:quot 是什么 作用 #pragma pack 网络编程      更新时间:2023-10-16
 #pragma pack(push)
 #pragma pack(1)

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

微软的解释:

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

IBM的AIXxlC解释:

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

基本上,它确定存储结构或并集时将使用的字节边界。推送/弹出的作用是在堆栈上存储和检索这些设置。

为了将来参考,你可以通过在网上搜索你所询问的关键词来节省一些时间。我所做的就是在上搜索"pragma pack"http://www.google.com

所有#pragma语句都是特定于供应商的。

这是Microsoft特有的,描述了编译器可以向struct添加多少"打包"(以字节为单位(以更好地对齐。

#pragma pack(push)只是将先前的设置保存在堆栈中。然后,您可以更改某个代码块的打包条件,稍后在#pragma pack(pop)上恢复以前的设置。

它是特定于MSVC++的包装说明符。您可以从文档中找到它的确切功能。

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

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