On Jun 20, 2:28 pm, Bernd Strieder <[EMAIL PROTECTED]> wrote: > Hello, > > [EMAIL PROTECTED] wrote: > > Say you have a file, a.h with an include guard. > > If you include it twice and look at the preprocessed output, you see > > there's no sign for the second inclusion. > > However, if you include it twice - once from a relative path, and once > > from an absolute one - you see that the second inclusion indeed occurs > > (enters the file and leaves immediately due to the include guard). > > > Why does this happen(I have my speculations, but I want some > > reassurance...), and is there any way to make it always act like in > > the latter case? > > AFAIK gcc has some features recognizing include guards, avoiding opening > a guarede file a second time, and thus saving even more than the > include guard itself. Since opening a file can be costly due to OS > calls, this has been found an important optimization. > > That include guard optimization probably is based on a simple heuristic, > which you have broken by using relative and absolute filenames. > > Start reading withhttp://en.wikipedia.org/wiki/Pragma_once > > and follow the links to gcc > > Or see the section "Once-Only Headers" in the docs of cpp, the C > preprocessor. > > I think you can easily break the employed heuristics to reach your goal. > > Bernd Strieder
Thank you Bernd! I figured as much. I still don't understand how I can make the preprocessor NOT to employ the optimization. I agree it is indeed and important one for most practical needs, but as the moment I need the information that is withheld from me... Thank you very much again, - Tali _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus