2013-04-16 10 views
1

Я хочу знать, почему эта линия существует на каждом приложении MFC (которые заставляют сделать stdafx.h первый заголовок, включенный в каждый файл):Почему stdfax.h должен быть первым, включенным в приложения MFC?

#ifndef __AFXWIN_H__ 
    #error "include 'stdafx.h' before including this file for PCH" 
#endif 

Что причина (ы) за такое поведение?

+2

Обратите внимание, что PCH стоит на _Pre Compiled Header_, что помогает компилятору сократить время компиляции. – deepmax

+0

Предварительно скомпилированные заголовки могут использоваться только тогда, когда одни и те же заголовки включаются как самые первые. – sehe

+0

@sehe: больше похоже на дублирование этого (http://stackoverflow.com/questions/2976035/purpose-of-stdafx-h) – lucasg

ответ

3

Это верно лишь при использовании предварительно скомпилированных заголовков (PCH), и причина, почему не должно быть ничего перед #include "stdafx.h" является:

Visual C++ ничего не компилировать перед #include «stdafx. h " в исходный файл, если параметр компиляции /Yu'stdafx.h 'не отмечен (по умолчанию); он принимает весь код в исходном до и включая , что линия уже составлена ​​

из http://en.wikipedia.org/wiki/Precompiled_header

+0

спасибо, MSDN.com не очень помог по этому поводу ... – lucasg

2

Вы должны прочитать это краткое описание stdafx.h

Совместимые компиляторы (например, Visual C++ 6.0 и новее) будет прекомпилировать этот файл, чтобы сократить общее время компиляции. Visual C++ будет ничего не компилировать перед #include "stdafx.h" в файле , если параметр компиляции /Yu'stdafx.h 'не установлен (по по умолчанию); он принимает весь код в источнике до и в том числе, что строка уже скомпилирована.

Он неявно говорит, что для достижения преимуществ PCH вы должны включить stdafx.h как можно скорее в иерархию включения.

0

stdafx.h файл содержит общие заголовки, которые используются в разных файлах проекта. Не обязательно включать его, но тогда вам нужно управлять всеми заголовками вдоль вашего проекта, и это приведет к повторению некоторых заголовков по разным файлам.

Смежные вопросы