gcc - Make c++ macro2 containt quoted body of macro1 -
i'm trying make kind of simple system calculates number of builds, including info in .rc file (for windows) , met problem. here is:
#define quote(s) #s #define 0,0,0,1 #define a_str quote(a) expanding of a_str: "a" not "0,0,0,1" expected.
well, need a_str string representation of a (that's windres expects see in .rc file), can't find way this.
i've tried smth #define a_str #a expands #0,0,0,1.
i tried using qmake this: defines *= a_str="<here-is-how-i-get-version>" gcc gets without quotes , i've got same problem.
when c preprocessor macro expanded, parameters expanded literal arguments, s expanded a when quote(s) taking argument a expanded. normally, after expansion complete, expanded text scanned again expand macros embedded therein, cause a expand 0,0,0,1. however, when stringification operator # used stringify following text, stringification happens first, following text never gets chance expanded, stringified "a" final expansion of a_str.
this problem solved introducing second level of indirection, gives initial macro argument second chance expand:
#define quote2(a) #a #define quote(a) quote2(a) however, not work case, because in first-level expansion a expand 0,0,0,1, taken 4 arguments quote2(), , rejected invalid macro call.
you can solve variadic macro arguments , __va_args__:
#define quote2(...) #__va_args__ #define quote(...) quote2(__va_args__)
Comments
Post a Comment