呼叫者功能的打印名称

Ajith C Narayanan 2 c linux macros c89

我发现__FUNCTION__宏将给出当前正在执行的函数的名称,但是有没有可用的宏来打印父函数的名称(调用当前正在运行的函数的函数)?

void print_error_message(const char *msg)
{
    printf("%s : %s\n",__FUNCTION__,msg);
}

int main()
{
    print_error_message("failed to connect");
    return 0;
}

上面的程序将给出输出:

print_error_message : failed to connect

但是我真正需要的是

main : failed to connect

因为main()被调用 print_error_message()

我不想将另一个参数传递给print_error_message()像这样的函数print_error_message(__FUNCTION__, msg),我期望的是类似的宏或函数来检索调用方函数的名称。

Some program.. 7

没有从调用堆栈获取名称的标准方法,并且如果调试信息被剥离或以其他方式不可用,则根本不可能获得名称。

作为一个简单的工作流程,您可以使用宏:

#define print_error_message(msg) actual_print_error_message(__FUNCTION__, (msg))

void actual_print_error_message(const char *func, const char *msg)
{
    printf("%s : %s\n",func,msg);
}

请注意,__FUNCTION__它不是标准C,而是扩展。为了符合标准,请使用C99特殊的预定义变量__func__