[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: traditional cpp
> I also apparently don't have the right ideas about comment removal in
> traditional cpp, because it currently exhibits the behavior that
> #define STOP */
> #define START /*
> /* hello there STOP fnord START ho hum */
> outputs "fnord", which cannot be what anyone intended.
That's an interesting corner case.
I'm not sure what I think the right thing is (but, I agree, that ain't
it), and I no longer have a real old-school cpp on hand to try, at
least not at ready hand. (I may have a 4.4Lite CD or some such with
one. I'm not sure.)
> How's it supposed to be done? Right now it's removing comments after
> macro expansion, but if it removes comments before macro expansion
> then /**/ doesn't work for pasting...
Remove comments after macro expansion, yes. If the /* on the START
definition begins a comment, it continues up through the end of the
next line; if not, then the next line is a comment, and macro expansion
never happens inside comments.
I wrote a preprocessor back in the '90s, mostly to relieve a few
annoying limitations such as the inability of a macro to expand to a
macro definition. It treates @ kind of like # but able to appear
anywhere, and has (integer-valued) variables, looping constructs, and
the like. I didn't mention it because I thought we already had plenty
of preprocessors, but if anyone wants a copy, I'll be happy to send it
out or put it up for ftp.
For what it's worth, when fed those three lines (with no trailing
whitespace) my code produces a single newline as output. (On
investigation, it turns out it defines START to be everything from the
/* up to the end of the next line - the macro definition includes the
entire comment, including the newline.)
/~\ The ASCII Mouse
\ / Ribbon Campaign
X Against HTML mouse%rodents-montreal.org@localhost
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B
Main Index |
Thread Index |