【发布时间】:2019-11-26 11:09:36
【问题描述】:
我发现__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),我期望的是一个类似的宏或函数来检索调用函数的名称。
【问题讨论】:
-
请注意,标准名称是
__func__,这是一个预定义的标识符(参见C11 §6.4.2.2 Predefined identifiers)。名称__FUNCTION__和__PRETTY_FUNCTION__是 GCC 扩展。见What are the differences between__PRETTY_FUNCTION__,__FUNCTION__and__func__? -
另外,function names as strings 上的 GCC 文档指出:_ 这些标识符是变量,而不是预处理器宏,不能用于初始化 char 数组或与字符串文字连接。_
-
为什么是
ansi标签?