次のようなコードを書いてコンパイルしたときのお話. /* src1.c */ #include <stdio.h> int a; int sub(int n) { printf(" sub::a: %d\n", a); printf(" sub::a: %p\n", &a); return n+1; } /* src2.c */ #include <stdio.h> int a; int main() { int x; x = sub(a); fprintf(stdout, "x: %d\n", x); printf("a: %p\n", &a); return 0; } まず,間違っていることに気づかず行っていたこと グローバル変数は0で初期化されます.つまり,定義が同時に行われます. extern記述子を使うことで,どこかで定義してあることを伝えられます. つまり,externは同じグ