グローバル変数の定義順序について質問させてください。

--- values.cpp ---
int values[] = { 5, 1, 2, 4, ... };

--- values.h ---
extern int values[];

--- table.cpp ---
#include "values.h"
int table[] = { values[0], values[1], values[2], ... };

こんな風に、異なる翻訳単位に2つのグローバル変数
values[] と table[] があって、table[] の初期化が values[] に
依存しているときに、コンパイラはこの依存関係(?)をちゃんと
検出してグローバル変数の定義順序を決めてくれるもんなんでしょうか?
詳しい方おられましたら、よろしくお願いします。