で、とりあえず、externは、「この名前がグローバルだ」とするためのもの。
そのコンパイル単位で定義されているかどうかは関係ない。

それと、関数はデフォルトでextern。
つまり、staticを付けないで宣言(定義も)されたものは、全てexternと同等となる。