include stdafx.h in header or source file?

a 夏天 提交于 2019-11-28 11:59:44

stdafx.h should be the first include in EVERY cpp file in your project.


Consider that C++ doesn't compile header files, just Cpp files.

Therefore if the stdafx is the first include in the cpp file, then the compiler will have everything the header file needs, when it hits the header-file in the Cpp file.

e.g.

You have A.cpp & A.h.
A.h needs std:string.

you have B.cpp & B.h
B.h needs A.h therefore B.h needs std::string too.

Because it's good practice, you put #include <string> in stdafx.h.

Your build fails because nothing can see std::string

Now put stafx.h as the first include in A.cpp and B.cpp.
When the compiler hits A.cpp, it picks up the include for <string>, then picks up A.h, and everything is happy because we know what std::string is.

The compiler now hits B.cpp, again it includes stdafx first, which brings <string>, then hits B.h, which brings A.h which is again happy because std::string has already been included.

Hope this helps.

  • Only include things in your precompiled header which should be there
  • Your precompiled header file must be the first include in every .cpp
  • I would avoid including it in another header in favor of forward declaration

Ask yourself these two questions before including something in stdafx.h

  1. Will this header never be changed by me?
  2. Do I need this included in every multiple source file?

If the answer is "No" to either of those then don't include it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!