3つのファイルがあります:source1.c source2.c header.h
2つのソースファイルにはヘッダーが含まれています。
これはヘッダーのコードです:
struct
{
int a;
int b
} x;
ここで何が起こるかというと、構造体がグローバルになり、2つのソースファイルがxという構造体を共有するようになります。なぜこれが起こるのですか?
次のコードを書くと、2つのグローバル変数が作成されることを私は知っています。ソースファイルごとに1つ。(グローバルを共有しません)
int x = 0;
最後のコードは私には理にかなっていますが、構造体のコードは本当にわかりません。
編集:
うーん、ここのみんなは私がリンカーエラーを取得する必要があると思います。私の現在のコードは組み込みシステム(nxtOSEK)用です。後で通常のCプログラムに変換してみます。
EDITEDIT:
通常のCの例に戻ります。ご覧のとおり、構造体だけでなく通常の変数でも可能です。
source1.c
#include "header.h"
int main(void)
{
f();
x = 1;
f();
}
source2.c
#include "header.h"
void f()
{
printf("source2: %i\n", x);
}
header.h
#include <stdio.h>
int x;
出力
source2: 0
source2: 1
xが機能するために宣言してはならないことに注意してください。そうしないと、ここで誰もが言ったようにリンカーエラーが発生します。(なぜそれが埋め込みシステムで動作するのかわかりません。)
また、EricPostpischilの正解を読み間違えたようです。