2009-08-03 4 views

答えて

5

旧バージョン - (.NETが迷惑になりますが、C/C++しません正確な環境により異なります。)

struct foo x; 
struct inner *i = &x.i; 
i->bar = 42; 
quux(&x); 

唯一の違いは、構造体の名前であり、そして内側の構造体の型の名前はコンパイル時に消去され、何のbがありませんので、 inary incompatibility。

0

さまざまなマシン上の静的リンクされたライブラリのバージョンが異なると、マシンAでコンパイルされたバイナリがマシンBで正常に動作することがありますが、マシンBのソースからコンパイルできません。しかし、ソースの非互換性は、一般的にバイナリの非互換性を意味します。

0

関数のパラメータの型が実際のサイズや基底型が変更されていないとします(たとえば、ある列挙型から別の型へ、またはlongからintへ)。型チェックのためにソースコードが壊れてしまいますが、バイナリ互換性には影響しません。

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); 

ブロークン・コード:

+0

intにlongを指定すると、64ビットアーキテクチャなどでバイナリ互換性が損なわれます。 – penguin359

関連する問題