これは文章で説明するのは難しいので、例を挙げます。
//f1.c
int a = 5;
int main()
{
printf("func2() output is: %i\n", func2() );
return 0;
}
//f2.c
static int a = 3
int func2()
{
extern int a;
return a;
}
これをコンパイルして実行すると、5 を期待していたのに 3 になりました。なぜ 3 になったのか説明してもらえますか? 関数内で extern を使用することで、静的変数の値を使用しないと思っていたでしょう。