C言語なら俺に聞け(入門篇) Part 26

このエントリーをはてなブックマークに追加
637デフォルトの名無しさん
うわー、名前でちゃった...
...ついでに質問なんですが、
/* src1.c */
int a;              // グローバル変数
int main() {
 int x;
  x = sub(a);
  printf("x: %d\n", x);
  printf("a: %p\n", &a);
  return 0;
}
/* src2.c */
int a;              // グローバル変数
int sub(int n) {
  printf(" sub::a: %d\n", a);
  printf(" sub::a: %p\n", &a);
  return n+1;
}

2つソースファイルで定義してるグローバル変数aは
それぞれでメモリの割付が行われると思うのですが、
同じアドレスのもののようなんです。
ということは、extern記述子は冗長な表現ってことになってしまうんでしょうか?
# externって他のソースファイルで定義してるからここでは宣言のみ、
# ですよってことだったと認識していたのですが