質問: 10; printf("%d\n",i); } ``` global.h ``` int i; extern void foo() ``` gcc file1.c file2.cを実行するとすべて正常に動作し、期待される出力が得られます。今、私は0と言うようにヘッダーファイル内の変数 'i'を初期化し、再度コンパイルするとリンカーエラーが発生します: ``` /tmp/cc0oj7yA.o:(.bss+0x0): multiple definition of `i' /tmp/cckd7TTI.o:(.bss+0x0): first defined here ``` ヘッダーファイル(gcc file1.c)の初期化でfile1.c(foo()への呼び出しを削除する)をコンパイルするだけで、すべて正常に動作します。何が起こっている?
回答: ヘッダー内の変数を初期化しないでください。ヘッダの宣言と初期化を `c` ファイルのいずれかに入れます。 ヘッダーには: ``` extern int i; ``` file2.cの場合: ``` int i=1; ```