Почему MinGW автоматически включает - PullRequest
3 голосов
/ 01 апреля 2011

Я пытаюсь ввести DWORD по умолчанию независимо от платформы, и я сталкиваюсь со следующей ошибкой компилятора:

...\mingw.org\mingw_gcc_4.5.0\bin\../lib/gcc/mingw32/4.5.0/../../
../../include/windef.h:229:23: error: 
'DWORD' has a previous declaration as 'typedef long unsigned int DWORD'

Я бы хотел иметь возможность зависеть от моей реализации DWORD, а не от базового компилятора, который знает, что это такое (используя typedefs, а не макросы).

Почему mingw (gcc 4.5.0) автоматически включает "windef.h" при компиляции приложения?

Как можно предотвратить это включение?

Ответы [ 2 ]

4 голосов
/ 01 апреля 2011

Мой MinGW, похоже, автоматически не вытягивает windef.h.Я подозреваю, что ваша программа включает в себя какой-то другой заголовок, который косвенно вытягивает его. Можете ли вы опубликовать короткую программу, которая отображает проблему?

Обратите внимание, что я вижу, вы используете, определен ли для _WINDEF_Hопределить, если эти вещи уже были typedef'ed.Это может работать, когда используется MinGW, но фактический Windows SDK определяет _WINDEF_, когда включен windef.h - по крайней мере, одна конкретная версия.Я полагаю, что это довольно стабильно, но, безусловно, возможно, что в какой-то момент это изменилось.

Возможно, было бы лучше ввести что-то вроде макроса MAKEWORD, чтобы определить, был ли windef.h уже включен -MAKEWORD задокументировано как макрос, определенный в windef.h, поэтому он должен быть стабильным во всех версиях SDK, будь то от Microsoft или нет.

4 голосов
/ 01 апреля 2011

Решено,

Оно было включено в windows.h, включено в файл заголовка повышения.

Мой файл заголовка, который определяет эти typedef, просто ищет наличие "_WINDEF_H"- и имеет правило, что он должен быть последним включенным заголовочным файлом (чтобы обеспечить достаточное время для включения заголовочных файлов Windows, что сводит на нет необходимость моего typedef).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...