$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Paul Mensonides (pmenso57_at_[hidden])
Date: 2005-12-20 04:47:02
> -----Original Message-----
> From: boost-bounces_at_[hidden]
> [mailto:boost-bounces_at_[hidden]] On Behalf Of Paul Mensonides
> > So if I understand you correctly, it should just skip over any
> > gibberish it might encounter until the matching #endif is found?
>
> Yes, except that it still must tokenize the block. You can
> still get errors in tokenization, such as:
>
> #if 0
> "half-open // error
> #endif
>
> > Is the preprocessor allowed to issue warnings about the gibberish?
>
> The main point about the above is that the block must be
> tokenized, but it should not be parsed to produce directives
> or scanned for macro replacement.
What I said here isn't quite correct, so I'll elaborate. The block has to be
parsed just enough to determine nested conditional compilation blocks. E.g.
#if 0
#if 0
#endif
#endif
...but it isn't supposed to parse anything else--including an operands to
directives. So, the following should still work:
#if 0
#if // no expression!
#endif
#endif
So, basically, the only parse is to tell if a name following '#' on a new line
is one of the conditional compilation directives or not. Specifically, from
16.1/6, "...the group that it controls is skipped: directives are processed only
through the name that determines the directive in order to keep track of the
level of nested conditionals; the rest of the directives' preprocessing tokens
are ignored, as are the other preprocessing tokens in the group."
Regards,
Paul Mensonides