実はこのあたりの話を理解しないままに10年近くCでコーディングしていたことに気づいたので、勉強したついでに備忘録。 リンケージ まず基本から。 リンク時にシンボル名が被った時に、実体との対応付けをどうするか、これが3通りあります。 外部リンケージ(ソースファイルを超えて同じ実体を共有) 内部リンケージ(ソースファイルごとに異なる実体を用意、ソースファイル内では同じ実体を共有) リンケージなし(それぞれ別の実体を用意) 局所変数はすべてリンケージなしになります。 グローバル変数は内部/外部リンケージになります。 外部リンケージを持つグローバル変数の宣言・定義 基本形 まず基本的な書き方です。 /* file1.c */ extern int a; /* これは宣言だけ */ /* file2.c */ extern int a; /* こっちのファイルでも宣言だけ */ /* file3.c