【发布时间】:2010-07-22 13:57:20
【问题描述】:
假设我在低级代码深处定义了一个结构,该结构以最疯狂和未知的方式在各处使用:
struct T {
unsigned short name_len;
char d_name[LENGTH];
}
附带的函数会在 d_name 中填充需要放入的任何内容,例如
struct T* fill( somethingOrOther* X)
我想扩展旧的 struct+function 以包含一个新变量:
struct T {
unsigned short name_len;
char d_name[LENGTH];
unsigned short type_len;
char d_type;
}
并且新版本的函数也会用有用的东西填充 d_type 变量。
这种类型的更改会破坏 API 吗?我不能只使用新的 T 代替旧的 T,并额外访问新成员吗?
【问题讨论】:
-
我猜关键问题是:是否保证
offsetof(struct T, d_name)的值在T 的旧定义和新定义中是相同的?
标签: c api struct backwards-compatibility