[cfe-dev] #define behavior
hartmut.kaiser at gmail.com
Thu Dec 6 17:37:06 PST 2007
> > > > Further, IIUC concatenating two tokens (using ##)
> forming another
> > > > (invalid) pp token results in undefined behaviour in
> C90/C++ but
> > > > is allowed in C99/C++09. Gcc issues a warning here (I'm not
> > > sure about clang) for C90/C++.
> > >
> > > There is no difference between C90 and C99 here. I'm the person
> > > that made it a hard error in GCC; it is not a warning.
> > > That is and was my preference. :)
> > Ok, but it is allowed in C99, and undefined behaviour in C++98.
> > Admittedly, I was not sure about C90.
> I don't understand what you mean "is allowed". An
> implementation can choose to make undefined behaviour allowed
> in any particular case, but invalid pasting is not required
> to be accepted by any of the standards; it is undefined in
> all (or can you quote something to the contrary?)
I had to re-read both standards, and you're right. I'm sorry for the noise,
somehow I was thinking it's not undefined behaviour in C99.
> C++'s preprocessor is essentially C90's with a couple of tweaks
> for booleans and UCNs; nothing else changes.
Ok, good to know. I don't have a C90 standards document available.
More information about the cfe-dev