小编spi*_*iky的帖子

sizeof(struct)如何帮助提供ABI兼容性?

假设C库必须与应用程序代码共享结构的细节,并且必须保持API和ABI向后兼容性.它试图通过检查传递给它的结构的大小来做到这一点.

比如说,需要更新以下结构.在库版本1中,

typedef struct {
    int size;
    char* x;
    int y;
} foo;
Run Code Online (Sandbox Code Playgroud)

在库的第2版中,它更新为:

typedef struct {
    int size;
    char* x;
    int y;
    int z;
} foo_2;
Run Code Online (Sandbox Code Playgroud)

现在,库版本2想要检查应用程序是将新的foo_2还是旧的foo作为参数arg传递给函数.它假定应用程序已设置arg.sizesizeof(foo)sizeof(foo_2)尝试确定应用程序代码是否为版本2.

if(arg.size == sizeof(foo_2)) {
    // The application groks version 2 of the library. So, arg.z is valid. 
} else {
    // The application uses of version 1 of the library. arg.z is not valid.
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这不会失败.在GCC 4.6.3,与-O3标志,无论是sizeof(foo)sizeof(foo_2) …

c api compatibility abi

5
推荐指数
1
解决办法
726
查看次数

标签 统计

abi ×1

api ×1

c ×1

compatibility ×1