如何在函数声明中用省略号获取C中的调用函数名?

mul*_*g0r 7 c

我试图在函数中知道它的来电者姓名.

如果您查看以下链接,它不会重复,因为我添加了一个区别:函数声明中的省略号用法.

我试过这个,从这个解决方案开始我们怎么知道调用者函数的名字?要做到这一点,但我无法得到解决方案.

这对我有用:

void a(int deb, char *str)
{
    printf("%s\n", str);
}

void a_special(int deb, char const * caller_name, char *str)
{
    printf( "[%d] blablabla [%s] ", deb, caller_name);
    a(deb, str);
}

#define a(deb, str) a_special(deb, __func__, str)

int main()
{
    a(1, "my log");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我添加省略号(我说:"......")时,我不知道如何用宏定义来实现它.可以在标准-C?

void a(int deb, char *str, ...) 
{
    va_list args;
    va_start(args,str);
    vprintf(str,args);
    va_end(args);
}

void a_special(int deb, char const * caller_name, char *str, ...) 
{
    printf( "[%d] blablabla [%s] ", deb, caller_name);
    a(deb, str, ...); 
}

#define a(deb, str) a_special(deb, __func__, str)

int main()
{
    a(1, "mylog %d %s", 1, "param2");
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用-rdynamic进行backtrace编译而没有成功,但无论如何我更愿意知道如何在宏中包含省略号(3点).提前致谢!

Duc*_*ers 6

如果您要求的是如何将省略号转发到宏,然后从宏转发到函数,那么以下内容就足够了.

基本上,你也可以通过宏也...可以使用椭圆和宏内部__VA_ARGS__.

void a(int deb, char *str, ...)
{
    va_list args;
    va_start(args,str);
    vprintf(str,args);
    va_end(args);
}

void a_special(int deb, char const * caller_name, char *str, ...)
{
    printf( "[%d] blablabla [%s] ", deb, caller_name);
    a(deb, str);
}

#define a(deb, str, ...) a_special(deb, __func__, str, __VA_ARGS__)

int main()
{
    a(1, "mylog %d %s", 1, "param2");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)