こんなところかな。
someFunc() {
Type val; // ローカル変数
static Type val; // ローカル静的変数
}
Type val; // グローバル変数
static Type val; // ファイルスコープ静的変数
extern Type val; // 外部のグローバル変数(定義ではexternは無意味)

Type func(...); // グローバル関数(宣言においては外部リンケージ)
static Type func(...); // 静的関数
extern Type func(...); // 外部のグローバル関数(定義ではexternは無意味)

んでもって、ややこしいのは関数外で無修飾で外部リンケージを持つ点だから、
無修飾ではファイルスコープしか持たないことにして
外部リンケージを持たせるためのglobalみたいなキーワードを用意したとする。
関数内変数は同じことだから省略して、
Type val; // ファイルスコープ変数
static Type val; // 静的なファイルスコープ変数(前者との区別はどうしようw)
global Type val; // 外部リンケージを持つ所謂グローバル変数
global static Type val; // グローバルで静的な変数(これも意味がよく判らんw)
結局のところ、「静的」とは何かが巧く定義できてないのが諸悪の根源かw