对于某些编译器, struct 有一个打包说明符,例如:

RealView ARM compiler has "__packed"
Gnu C Compiler has "__attribute__ ((__packed__))"
Visual C++ has no equivalent, it only has the "#pragma pack(1)"

我需要一些我可以放在struct的定义中的东西.

有什么信息/黑客/建议吗?蒂娅...

推荐答案

您可以按如下方式为GNU GCCMSVC定义Pack:

#ifdef __GNUC__
#define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))
#endif

#ifdef _MSC_VER
#define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop))
#endif

这样使用:

PACK(struct myStruct
{
    int a;
    int b;
});

C++相关问答推荐

ARM上的Modulo Sim Aarch 64(NEON)

如何在c++中包装返回空*的函数

CSAPP微型shell 实验室:卡在sigprocmask

整型文字后缀在左移中的用途

编译器如何处理具有更复杂值的枚举?

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

运行时错误:在索引数组时加载类型为';char';`的空指针

我可以创建适用于不同endian的 colored颜色 struct 吗?

int * 指向int的哪个字节?

在运行时判断C/C++指针是否指向只读内存(在Linux操作系统中)

如何在C中定义指向函数的指针并将该指针赋给函数?

生成一个半RNG,结果用C表示(无随机/随机)

浮动目标文件,数据段

Malloc和对齐

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

哪些C++功能可以在外部C块中使用

我的代码可以与一个编译器一起使用,但不能与其他编译器一起使用

GDB 跳过动态加载器代码

C语言程序流程解释

我该如何处理这个 C 90 代码中的内存泄漏?