Aji*_*nan 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;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序将给出输出:
print_error_message : failed to connect
Run Code Online (Sandbox Code Playgroud)
但是我真正需要的是
main : failed to connect
Run Code Online (Sandbox Code Playgroud)
因为main()被调用 print_error_message()
我不想将另一个参数传递给print_error_message()像这样的函数print_error_message(__FUNCTION__, msg),我期望的是类似的宏或函数来检索调用方函数的名称。
没有从调用堆栈获取名称的标准方法,并且如果调试信息被剥离或以其他方式不可用,则根本不可能获得名称。
作为一个简单的工作流程,您可以使用宏:
#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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,__FUNCTION__它不是标准C,而是扩展。为了符合标准,请使用C99特殊的预定义变量__func__。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |