c - 将成员添加到 C 风格结构和向后兼容性

标签 c api struct backwards-compatibility

假设我在低级代码的某个深处定义了一个结构,以最疯狂和未知的方式在各处使用:

struct T {
    unsigned short name_len;
    char d_name[LENGTH];
}

附带的函数可以用需要放在那里的任何东西填充 d_name,比如

struct T* fill( somethingOrOther* X)

我想扩展旧的结构+函数以包含一个新变量:

struct T {
    unsigned short name_len;
    char d_name[LENGTH];
    unsigned short type_len;
    char d_type;
}

而且新版本的函数也会用有用的东西填充 d_type 变量。

这种类型的更改会破坏 API 吗?我不能只使用新 T 而不是旧 T,并且另外访问新成员吗?

最佳答案

像这样扩展你的结构可能是有意义的:

struct newT {
    struct T t;
    int newElement;
    ...
}

然后你就可以安全的使用newT指针作为T指针了; C 标准保证在结构的第一个元素之前没有填充。

关于c - 将成员添加到 C 风格结构和向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3309614/

相关文章:

azure - .NET Core API 无法在 Azure 应用服务上运行 - 您正在查找的资源已被删除、更名或暂时不可用

c - 为什么定义一个 _struct 然后在没有 _ 的情况下对其进行类型定义?

ARM 中基于堆栈的结构的调用约定?

调用 C 函数而不用 NM 命令显示它们

c - 为 scanf() 输入一个值,但没有任何反应

windows - 无法将带有 Skype4COM 的 Windows 服务附加到 Skype 客户端

android volley 给客户端错误代码 400

c - 如何访问映射到 swift 结构的内存缓冲区?

用mingw编译FMOD?

在 C 代码中使用 popen() 更改密码