【发布时间】:2021-09-30 01:24:20
【问题描述】:
我需要在字符串的开头附加调用方的函数名并用括号连接,这样它看起来像[<FUNCTION_NAME>] <string>,但我得到的是[name] <string>作为输出......可能它与@有关987654323@ 对传入的变量进行字符串化,但如何使其工作?
#define FUN(STR) "["#STR"] "
void foo(const char *name, char *fmt, ...)
{
char buff[100] = {0};
va_list pList;
va_start(pList, fmt);
int ret = vsprintf(buff, fmt, pList);
va_end(pList);
char p[100] = {0};
sprintf (p, "%s%s", FUN(name), buff);
printf ("%s\n", p); // [name] Some string with value = 5
}
void bar()
{
foo(__func__, "Some string with value = %d", 5);
}
int main()
{
bar();
return 0;
}
【问题讨论】:
-
太棒了
printf("[%s]%s", name, buff)? -
当然不是……
-
为什么不呢?
-
我只是不打印它;我想要一个指向它的指针,因为它在程序的其他地方使用过
-
宏适用于 text,而不适用于变量,预处理器不存在变量。
#对 textname应用#操作,因此它变为"name"。