Как не включить - PullRequest
       40

Как не включить

7 голосов
/ 14 июня 2010

Использование MSVC2008, 32-битная в 64-битной системе.

Однажды мне посоветовали никогда не включать windows.h как «настоящий монстр, который значительно замедлит время моей компиляции».

Iпопытался пропустить это и, очевидно, получить ошибки компиляции.Я включил windef.h, чтобы определить все DWORD и т. Д., Но быстро отклеился, зная, что еще нужно определить, чтобы получить код для компиляции.

Теперь я получаю:

2>c:\program files\microsoft sdks\windows\v7.0\include\winnt.h(6361) : error C2146: syntax error : missing ';' before identifier 'ContextRecord'
2>c:\program files\microsoft sdks\windows\v7.0\include\winnt.h(12983) : error C2065: 'PCONTEXT' : undeclared identifier

Может кто-нибудьпредложить правильный подход здесь?

Спасибо

Саймон

Ответы [ 4 ]

24 голосов
/ 14 июня 2010

Используйте предварительно скомпилированные заголовки для улучшения времени компиляции и включите windows.h.

13 голосов
/ 14 июня 2010

Внутренне, windows.h поддерживает многие определения, такие как NOMINMAX или WIN32_LEAN_AND_MEAN.

Это значительно сокращает время.

8 голосов
/ 14 июня 2010

Правильный ответ будет «включить его в PCH». Предварительно скомпилированные заголовки значительно сокращают время компиляции, и, вопреки распространенному мнению, это справедливо и для Full Rebuilds.

Если в вашем проекте более одного файла CPP, функция «Перестроить все» создаст его один раз для всего проекта, в котором всего лишь несколько секунд для компиляции времени - для включения windows.h во все из них.

2 голосов
/ 05 марта 2012

Исследуйте API и убедитесь, что заголовки включены в правильном порядке.Нетрудно не использовать Windows.h;но вы узнаете о заголовках MS в процессе.

Есть несколько заголовков, которые вы должны знать:

WTypes.h
WinDef.h
WinBase.h
WinObject.h
...