C/C++ 如何将宏参数扩展为引号之间的文本

C/C++ How to expand a macro parameter into text between quotes

本文关键字:之间 文本 扩展 参数 C++      更新时间:2023-10-16

这是我所拥有的(message()是来自第三方库的专用日志记录函数):

#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"。有可能做我想做的事情吗?

不要把#fmt放在引号里。只需使用字符串文本连接来连接两个文本。

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