www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript

c++ - Couple of postings at comp.lang.C++ Re ##, food for thought

I'd think...

     #defina a(x) x
     a(the_file).ext

should result in 

     the_file.ext

But then I'm not sure what the compiler should do if I write,

     a(the_file)ext  //no dot  

Rob Williscroft wrote: It should produce the output "the_fileext" (not the quotes), however this is 2 preproesor tokens (though only one C++ identifier). Add: #define the_fileext Expansion #define B() a(the_file) B() should produce: "the_fileext" Not "Expansion". I.e. juxtaposition is fine for producing C++ tokens but not for preprocessor tokens (i.e. tokens that can themselves be expanded). The pre ## way was something like: #define cat(a, b ) a/**/b #define XY Expanded cat(X, Y) produced "Expanded". This is what (IMO) ## was designed to fix.
Wow!  My head is spinning. Ok, you're saying that in the old days a
macro could modify the instance of another macro before the latter was
applied.  But I thought that was the way it is currently, isn't it?
Would your last example NOT do that now?  And how does ## prevent...
what exactly?
Maybe if you could give me a 4-way example: What worked and didn't
work / then and now.  Thx.

Rob Williscroft wrote: The problem with this method is when the C standard came out it required comments to be replaced with a single space character. Presumably this was so you couldn't write print/* whatever */f( "\n" ); and have the compiler see printf( "\n" ); So code that relied on this behaviour needed another way of achiving the same thing hence the invention of ##. Rob.
Dec 03 2003