[ACCEPTED]-Visual C++ 'Force Includes' option-visual-c++
I would say the opposite to litb above if 14 you're using precompiled headers. If you 13 use "stdafx.h" as your precompiled header 12 and have code like this:
#include "afile.h"
#include "stdafx.h"
then you'll be spending 11 an age trying to figure out why "afile.h" isn't 10 being included. When using precompiled headers, all 9 the includes and #defines are ignored up 8 to the "stdafx.h". So, if you force include 7 the "stdafx.h" then the above will never 6 happen and you'll get a project that uses 5 the precompiled option efficiently.
As for 4 litb's comment about finding macros, good 3 IDE's usually have an option to jump to 2 the definition of a symbol, whether it be 1 a #define, function, class, etc.
I would discourage from /FI (MSDN says it's 8 called /FI . Not sure whether i looked at 7 the right page though), simply because people 6 or yourself reading the files don't notice 5 a header is magically included anyway.
You 4 can be sure this will cause much debugging 3 time for someone that wants to figure out 2 where specific macros come from, even though 1 there are no #include
lines at the top of the file.
Force includes is also helpful for automatically 9 generated source files. Our system uses 8 a tool that generates many source files 7 but they don't include our pre-compiled 6 header file. With "force includes" compilation 5 of these files is now faster.
Optionally, it 4 would be possible to write a script to insert 3 the #include line in those files after generation 2 and before compilation. But why go to that 1 trouble?
I'd side with litb: don't do the forced 9 includes. Having the code be explicit makes 8 it easier to know what's going on for a 7 new user. It also makes it easier to know 6 what's going on if you ever need to port 5 the code to a new platform.
Note that if 4 the code uses templates, Visual Studio usually 3 can't track down the definitions correctly. Perhaps 2 2010 will be better, but even VS 2008 is 1 problematic on this front.
I wouldn't use it that often but it has 18 its uses. I have used it to add a header 17 that suppressed some warnings to all cpp 16 files so that I could turn on /W4 or /Wall 15 for the project and not have to edit all 14 of the cpp files to include the warning 13 suppression header first. Once eveything 12 was working I DID go back and edit all the 11 cpp files but for a proof of concept /FI 10 was useful.
Likewise you can use it to force 9 a precompiled header into cpp files in some 8 build configurations but not in all (in 7 case you want to have a build configuration 6 that DOESNT use precompiled headers and 5 that makes sure that each cpp only includes 4 exactly what it needs to). However using 3 #pragma hdrstop is, IMHO, a better way to 2 achieve this.
I've talked about all of this 1 on my blog here: http://www.lenholgate.com/blog/2004/07/fi-stlport-precompiled-headers-warning-level-4-and-pragma-hdrstop.html in a little more detail.
Save this function for when something weird 3 comes up - like if you want to include a 2 header in a generated source file. Even 1 then there are likely better ways.
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.