对于编译器,C struct如何忽略内部顺序?

4 c struct

例如,我们有两个结构:

struct type1 {
    int  t;
    char c;
};

struct type2 {
    char c;
    int  t;
};
Run Code Online (Sandbox Code Playgroud)

C编译器在哪个阶段可以忽略顺序的差异并将它们解析为同一个结构?如何?

aja*_*jay 6

C编译器在哪个阶段可以忽略顺序的差异并将它们解析为同一个结构?如何?

编译器不会忽略声明struct成员的顺序.实际上,结构保证了成员以与它们声明的顺序相同的顺序布置在存储器中,尽管在结构对齐需要时插入了填充位.因此,编译器将始终把struct type1struct type2不同类型.

  • 我只是想补充一点,答案是"永远"的原因是因为开发人员可能正在编写自己的API来接受这些结构,而不一定是在C中.因此*需要*一种了解顺序和偏移的通用方法.字段,以及.h文件中的结构定义是完美的. (2认同)