Gennaro Prota wrote:
Hmm... frankly I haven't used it anymore. I'm under the impression
they have fixed it now, but last time I checked it had a lot of bugs.
It was easy, for instance, to end up including the same file twice if
it was reached through different paths (e.g.: #include "subdir/file.h"
in A.cpp and #include "file.h" in subdir/file2.h). Usually one doesn't
notice the error, because he uses both the pragma and the canonical
include guard, but that means of course that the speed gain comes to
nothing. Probably it was VC++ 5.0 though.
You are missing the point here. "#pragma once" is not really "functional", in the sense that it's not (or should not be) used *alone* to realize the "include me once" effect. That effect is better achieved by the canonical include guards that should be used anyway (and *will* be used anyway in portable code).

"#pragma once" is just an optimization issue. If a file is included a second time in the same TU, a dumb compiler will re-open it and give it to the preprocessor who strips its contents entirely because the include guard is already defined. Re-opening + preprocessing takes little but significant time.

With the "#pragma once" the programmer just gives an hint to the compiler that re-opening is unnecessary and ignores the #include directive immediately. You see, there *is* a speed gain even in the presence of canonical include guards.

Of course, a smarter compiler like g++ will recognize the canonical include guards and deduce that re-opening is unnecessary without any explicit hint given by the programmer.

[...] In effect, the whole story about file inclusion should be
the other way round: any source file is included at most once for each
TU, unless the programmer requires otherwise ;-)
I agree, but we can't give the burden of avoiding multiple inclusions to the "user". Realistically, with large projects such intent is hardly achievable by anyone.

Alberto



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Reply via email to