我想知道是否有办法在C中找到称为当前函数(在运行时)的函数.
我知道你可以__FUNCTION__在gcc中使用,但有没有办法不使用C预处理器?
可能不是.
干杯
不,没有.C不是一种特别内省的语言 - 诸如函数名称(或调用堆栈的部分)之类的东西在运行时不能以任何理智的方式提供.
如果由于某种原因,您正在寻找大量工作而没有什么好处,那么您可以使用调试符号构建程序,并且可以编写堆栈遍历和调试符号查找代码.然后你可以在飞行中找到它.但要小心,因为如果你涉及到任何C++,你将在调试信息中看到的符号将用类型信息进行修饰.
你已经标记了这个帖子gcc,所以相关的细节是可用的,但这属于'不推荐'和'不保证在编译器版本之间相同'的区域.
假设你有一个函数f(),你想知道调用者.
将该函数重命名为f_func()并定义一个打印__func__然后调用f_func()的宏f ().例:
void
f_func()
{
do something;
}
#define f() \
do { \
printf("f called from %s\n", __func__); \
f_func(); \
} while (0)
void
a()
{
f();
}
void
b()
{
f();
}
int
main(int argc, char **argv)
{
a();
b();
return(0);
}
Run Code Online (Sandbox Code Playgroud)