c - #pragma pack 与 Intel C 的 -fpack-struct

标签 c struct intel compiler-flags packing

我正在用 C 语言开发一个网络数据包模拟器,它需要使用几个不同的 struct 定义,例如:

struct DMPacketStruct
{
   short int header[8];
   short int a;
   unsigned char b;
   short int c;
}DMPacket;

默认情况下,编译器(英特尔)会在 bc 之后添加缓冲区,因此我可以使用 #pragma pack pre -processor 命令或将 -fpack-struct 添加到编译器标志中。由于我的程序中有几个类似的结构,因此我想使用-fpack-struct。除了减慢 IO 速度之外,使用标志而不是预处理器命令还有什么缺点吗?

最佳答案

#pragma 是源代码的一部分,有助于记录实际结构的布局。如果它位于外部 Makefile 或编译器选项中,则通过阅读代码很难明显看出布局是什么。

如果需要,其他编译器可以通过条件编译指示完全支持它。事实证明,#pragma pack() 受到 Borland、gcc 和 VC 的支持。甚至可能是英特尔:

#if defined(__INTELC_) || defined(__BORLANDC__) || defined(__MSVC__)
 #pragma pack(1)
#elif  defined(__SOME_OTHER_C__)
 #pragma struct packing(0)
...
#endif

关于c - #pragma pack 与 Intel C 的 -fpack-struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912098/

相关文章:

json - 不能 Json.Unmarshal 到一个结构

c - 多个结构的预分配 - 相同的结构

c - MPI 调试,段错误?

ios - swift 结构体作为函数参数

performance-testing - DRAM 访问的性能计数器

linux - 在 Red hat 中编译时出现段错误,但在 ubuntu 中运行正常

linux - NASM Assembly 64 位 Linux 中的比较

c - 关于 C 编译中的括号

c - 宏定义中的奇怪语法 [C]

c - 如何将二进制文件读入C中的结构