繁体   English   中英

如何快速声明#pragma pack(1)

[英]How to declare #pragma pack (1) in swift

我正在尝试将iOS C从目标C重写为Swift。 我正在使用序列化以便通过某种通信层发送数据。 在目标c中,我在每个结构的顶部使用#pragma pack(1),以便使用顺序布局而不在数据成员之间填充。 我试图在结构顶部使用PRAGMA_STRUCT_PACK。 它似乎可以在操场上工作,但是在我的应用程序中实现它时,我收到一条错误消息:“不允许在顶层进行表达式”。

从游乐场在此处输入图片说明

Swift不支持显式指定结构类型的数据布局。 (至少目前没有。 文件中的错误 ,如果有功能,你想看到的,也许苹果将让他们在未来的版本?)现在你最好的选择可能是申报布局敏感的结构(和功能访问他们)在C中,然后从Swift调用它们。

在Swift源代码中编写PRAGMA_STRUCT_PACK会给您带来错误,因为从C导入后,该宏的结果为文字1 在C语言中,应该使用该宏来检测编译器是否支持#pragma pack (在继续发出#pragma pack指令之前)。

(您可能会看到令人困惑的答案/评论,因为许多人在早期的Swift测试版中都在寻找#pragma mark 。但这不是他们在谈论的#pragma 。)

Swift不是C。如果您关心内存中结构的布局,那么您来错了地方。 我的意思是,为什么您会对这种实施细节感兴趣? Swift会按照自己想要的方式布局事物,而没有其他方式。 它不是汇编语言。

顺便说一句。 尝试使用打包结构进行序列化是完全错误的。 创建一个字节数组,然后将要写入的内容写入其中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM