This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: #import, #pragma once yadda yadda mumble grumble
- From: Jonathan Lennox <lennox at cs dot columbia dot edu>
- To: gcc-patches at gcc dot gnu dot org, Neil Booth <neil at daikokuya dot co dot uk>, Mike Stump <mrs at apple dot com>, Nicola Pero <nicola at brainstorm dot co dot uk>, Geoffrey Keating <geoffk at apple dot com>, gcc at gcc dot gnu dot org, Stan Shebs <shebs at apple dot com>, Zack Weinberg <zack at codesourcery dot com>, David Ayers <d dot ayers at inode dot at>
- Date: Tue, 29 Jul 2003 19:35:28 -0400
- Subject: Re: #import, #pragma once yadda yadda mumble grumble
- References: <20030729222547.GF14334@daikokuya.co.uk><16166.64763.272569.879473@grandcentral.cs.columbia.edu>
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
right.
> 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