Если приведенный вами пример верен, меня будет беспокоить тот факт, что ваш заголовочный файл повторно объявляет и инициализирует это значение для каждого файла, в который он включен. Если он объявлен в нескольких файлах без пространств имен, вы в конечном итоге получите с несколькими объявлениями одного и того же символа.
Более того, даже если это было просто объявление, а реализация была в отдельном исходном файле, существует много отмеченных проблем со статическими глобальными переменными, включая порядок инициализации нелокальных статических глобальных переменных (инициализация одного глобального в одном файле в зависимости от другого глобального). в инициализируемом отдельном файле - порядок инициализации глобалов в отдельных файлах недетерминирован). Более разумный подход (объясненный Скоттом Мейерсом в Effective C ++) может быть следующим:
<br />
defs.h:<br />const UINT getUniqueMessage();
<br /><br />
defs.c:<br />
const UINT getUniqueMessage()<br />
{<br />
static UINT UNIQUE_MESSAGE = RegisterWindowMessage(_T("UNIQUE_MESSAGE-{E5476FDB-3E7E-4113-8132-1D87709BC46C}")); // initialized once first time called<br />
return UNIQUE_MESSAGE;<br />
}
Теперь getUniqueMessage () можно вызывать где угодно, в том числе и во время инициализации других глобальных переменных, не опасаясь использования чего-то, что еще не может быть инициализировано.