This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: #import, #pragma once yadda yadda mumble grumble

On Tuesday, July 29 2003, "Jonathan Lennox" wrote:

> I hope so too, but I have a few questions about semantics of #import /
> #pragma once (which have always been the matter of much debate).

And by reading the code I can answer my own questions...I've provided my
answers here to a) answer them for others, and b) make sure I read things

> 1) What definition of "the same file" are you using?  When you say you "it
> doesn't second-guess the filesystem", do you mean that the rule is just
> "same absolute path, before any link or .. resolution"?  There are cases
> where that would break, but they would -- arguably -- deserve to be broken.

The definition is "either a hash table hit (same search path position and
filename) or the same last-modified date (st_mtime) and same content",
with the "same content" check optimized by checking the file's length.  I
like that, nice and simple, and very portable; the last-modified date is
almost certainly the one piece of file meta-data supported by every
filesystem implemented.

> 2) What happens if you mix #include and #import of the same file?

Nothing in particular; #import behavior is only affected by previous #import
directives, not by #include, and #include ignores any previous #import's.

> 3) If you  #import a file to a PCH file, and then later use the PCH file and
> also re-#import the file outside of the PCH file, what happens?  What if
> it's on another host?  (This could definitely fall into the category of
> "deserves to break".)

It still uses the same definition of sameness as above.  So PCH'ing an
#import'ed file, modifying it, and using both the PCH file and the #imported
file -- or switching the PCH file to another machine where the headers were
installed at a different time -- can potentially bring the file in twice.
This is probably the right thing to do, though it might be nice if this
could be warned for.

> These cases should probably be documented in the CPP manual (even if it's
> just to explicitly make some behavior undefined).

Still think this. :-)

Jonathan Lennox
lennox at cs dot columbia dot edu

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]