// hoge.h (インクルードガード済み)
extern const int HOGE;
struct HOGESTRUCT {
 int array[HOGE];
};
は明らかにコンパイルエラーだろう。extern const int HOGE;は外部変数を
参照するための宣言であって、int array[HOGE];のHOGEの定数値が定義されてない。

// hoge.h (インクルードガード済み)
const int HOGE = 3;
struct HOGESTRUCT {
 int array[HOGE];
};

ではだめなの?const int HOGE = 3;は内部リンケージを持つから、複数のcpp
ファイルからインクルードしてもリンクエラーにはならないと思うけど。

認識違いだったらすみません。