Embedding macro values in strings
    Paul John Falstad 
    pfalstad at phoenix.Princeton.EDU
       
    Fri Jan 11 19:44:52 AEST 1991
    
    
  
In article <1991Jan10.200806.12745 at grep.co.uk> frank at grep.co.uk (Frank Wales) writes:
>For example, suppose I have  foo(__LINE__); in my source, and I want that
>to expand to  bar("Line n"); where n is substituted with the actual value
>of __LINE__ at that point.  Trying
>
>  #define foo(n)	bar("Line "#n)
>
>and invoking as  foo(10); yields  bar("Line 10"); , whereas  foo(__LINE__);
>yields  bar("Line __LINE__"); .
You realize, of course, that foo(10) would not actually produce:
   bar("line 10"),
but will produce:
	bar("line " "10")
wish is concatenated into a single string in a later phase of
compilation.  Just clarifying that.
Anyway, adding another level of macro expansion does the trick:
#define foo(n) bar("Line "fee(n))
#define fee(X) #X
foo(10)
foo(__LINE__)
This produces the intended result (using gcc):
bar("Line ""10" ) 
bar("Line ""4" ) 
--
Paul Falstad, pfalstad at phoenix.princeton.edu PLink:HYPNOS GEnie:P.FALSTAD
"We could nuke Baghdad into glass, wipe it with Windex, tie fatback on
our feet and go skating." - Air Force Times columnist Fred Reed
    
    
More information about the Comp.lang.c
mailing list