欢迎任何演示源兼容性被破坏但二进制兼容性保持的示例。
Anon
问问题
177 次
3 回答
5
旧版:
struct inner {
int bar;
}
struct foo {
struct inner i;
};
void quux(struct foo *p);
新版本:
struct inner2 {
int bar;
};
struct foo {
struct inner2 i;
};
void quux(struct foo *p);
损坏的代码:
struct foo x;
struct inner *i = &x.i;
i->bar = 42;
quux(&x);
由于唯一的区别是结构的名称,并且内部结构的类型名称在编译期间被删除,因此不存在二进制不兼容。
于 2009-08-03T01:12:31.650 回答
0
不同机器上不同版本的静态链接库可能会导致在机器 A 上编译的二进制文件在机器 B 上正常工作,但尝试从机器 B 上的源代码编译它失败。但除此之外,源不兼容通常意味着二进制不兼容。
于 2009-08-03T00:55:16.840 回答
0
想象一下,函数参数的类型发生变化,而实际大小或基础类型没有变化(例如,从一个枚举到另一个枚举或从 long 到 int)。由于类型检查,这会破坏源代码,但可能不会影响二进制兼容性。(取决于具体的环境——.NET 会被惹恼,但 C/C++ 不会。)
于 2009-08-03T00:55:26.000 回答