假设我们有两个结构:
typedef struct Struct1
{
short a_short;
int id;
} Struct1;
typedef struct Struct2
{
short a_short;
int id;
short another_short;
} Struct2;
从 Struct2 *
转换为 Struct1 *
是否安全? ANSI 规范对此有何规定?
我知道一些编译器可以选择重新排序结构字段以优化内存使用,这可能会导致两个结构不兼容。有什么方法可以确保此代码有效,而不管编译器标志如何?
谢谢!
最佳答案
据我所知,这是安全的。
但如果可能的话,这样做会好得多:
typedef struct {
Struct1 struct1;
short another_short;
} Struct2;
然后您甚至告诉编译器 Struct2
以 Struct1
的实例开始,并且由于指向结构的指针始终指向它的第一个成员,所以您将 Struct2 *
视为 Struct1 *
是安全的。
关于c - 结构指针兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702713/