Я пытаюсь узнать в функции имя вызывающего абонента.
Если вы посмотрите на следующую ссылку, она не дублируется, потому что я добавил разницу: использование многоточия в объявлении функции.
Я пытался сделать, начиная с этого решения Как мы можем узнать имя функции вызывающей стороны? , чтобы сделать это, но я не могу найти решение.
Это работает для меня:
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;
}
Но когда я добавляю многоточие (я говорю: "...") Я не знаю, как этого достичь с помощью макроопределения.
Возможно ли в стандарте-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;
}
Я также пытался получить его, используя обратную трассировку с -rdynamic, но безуспешно, но в любом случае я бы предпочел знать, как включить многоточие (3 точки) в макрос.
Заранее спасибо!