如何使用macros参数作为string文字?

我想弄清楚如何编写一个macros,将一个variables名称的string文字表示与variables本身一起传递给一个函数。

例如给出以下function。

void do_something(string name, int val) { cout << name << ": " << val << endl; } 

我想写一个macros,所以我可以这样做:

 int my_val = 5; CALL_DO_SOMETHING(my_val); 

哪个会打印出来: my_val: 5

我尝试了以下操作:

 #define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR); 

但是,正如您可能猜到的那样,引号内的VAR不会被replace,而只是以string文字“VAR”的forms传递。 所以我想知道是否有办法将macros参数变成一个string本身。

使用预处理器#运算符 :

 #define CALL_DO_SOMETHING(VAR) do_something(#VAR, VAR); 

你想使用string操作符:

 #define STRING(s) #s int main() { const char * cstr = STRING(abc); //cstr == "abc" } 
 #define NAME(x) printf("Hello " #x); main(){ NAME(Ian) } //will print: Hello Ian 

也许你试试这个解决scheme:

 #define QUANTIDISCHI 6 #define QUDI(x) #x #define QUdi(x) QUDI(x) . . . . . . unsigned char TheNumber[] = "QUANTIDISCHI = " QUdi(QUANTIDISCHI) "\n";