|
Boost : |
From: Dan W. (danw_at_[hidden])
Date: 2003-12-03 02:24:32
Paul Mensonides wrote:
>No. The preprocessor does not "insert spaces" *ever*. At this point in
>translation, the preprocessor is operating on preprocessing tokens, not
>characters. There is a big difference between a lack of whitespace and
>concatenation.
Hi again, Paul. I'm sorry to bother so much. I forwarded your reply to
Walter, of Digital Mars, and he still doesn't seem convinced. I am 99%
convinced but I need to understand this fully if I'll ever be able to
convince him :-)
Let me try to put what you said in my own words, and then I'll ask you a
pointed question:
I always thought, myself, that the preprocessor worked at a textual level.
Now I'm getting the idea that the first pass in preprocessing is
'tokenization' which I take it to mean tagging tokens, like "abracadabra"
or "." or ")". So, if we have,
#define a(x) x
a(something).else
outputting
something.else
is NOT 'concatenation', as no tokens are being merged.
Could we say, then, that ## was invented as a special power tool for
'violating initial tokenization' and forcing a merger of two tokens?
If so, we could say that in the example above, the tokens are not being
violated, and therefore ## is not needed.
Now the pointed question: What then if I write,
a(something)else
without a "."? Should or shouldn't the preprocessor add a space in this
particular case?
Yours
dan
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk