extern 付いた宣言が外部リンケージになるのは、 extern が付いてるからじゃなくて、
実は先行する宣言含めて static が付いてないから、ってことかー。わかりにくいなー。