2012-05-10 24 views
3

之間。這裏的文字是我(消息()是從第三方庫專門的記錄功能):C/C++如何展開宏參數爲報價

#define LOG(fmt, ...) message("%s %s(): #fmt", __FILE__, __func__, __VA_ARGS__); 

所以我希望能夠做的事情,如:

LOG("Hello world") 
LOG("Count = %d", count) 

而且把它擴展爲:

message("%s %s(): Hello world", __FILE__, __func__); 
message("%s %s(): Count = %d", __FILE__, __func__, count); 

但#fmt的事情是行不通的。它不評估宏參數並打印爲「#fmt」。是否有可能做我想做的事情?

回答

5

不要把#fmt的報價。只需使用string literal concatenation即可加入這兩個文字。

#define LOG(fmt, ...) message("%s %s(): " fmt, __FILE__, __func__, __VA_ARGS__); 
+0

謝謝,這個工作,但實際上是一個無關的原因,我的第一個例子不工作(LOG(「世界,你好」),即不使用任何參數)。然而,有關於該主題已經商量好了在這裏:http://stackoverflow.com/questions/3576396/variadic-macros-with-0-arguments-in-c99 – Rich