通过函数指针获取函数名

时间:2022-10-01 18:30:50
大家好,请问在C语言中有没有办法通过函数指针获取到函数名呢?或者说能否获得该函数的唯一标识符呢?请提供一下思路,我想了很久都没想出来。

说明一下:我现在只能得到这个函数的函数指针,平台是Linux,GCC编译器。

16 个解决方案

#1


不管是函数指针还是变量的指针,你都不可能通过指针获取原函数的名字或者变量的名字,因为那就是一个符号或者说标签而已,不会和内存中的变量内容有关联。

#2


引用 1 楼 zshtang 的回复:
不管是函数指针还是变量的指针,你都不可能通过指针获取原函数的名字或者变量的名字,因为那就是一个符号或者说标签而已,不会和内存中的变量内容有关联。


那能不能得到这个函数的唯一标识呢,我是想把调用到的函数以文本形式记录下来。

#3


函数指针可以算作是唯一标志了,不会有重复。通过函数指针是拿不到函数名的,函数名只在编译时起作用编译后就不存在了。

#4


有函数指针了,还要函数名做什么?难道是给用户浏览使用嘛

#5


可以在被调用的函数中以字符串形式输出函数名
type functionName()
{
  printf("%s",__func__);/*__func__是个标准宏,它给出当前函数名*/
}

#6


引用 4 楼 mougaidong 的回复:
有函数指针了,还要函数名做什么?难道是给用户浏览使用嘛


因为我是想要把程序运行过程中调用到的函数都记录下来,所以想找到这个函数的唯一标识,要能以文本形式来记录的东西。

#7


引用 5 楼 cao_julians 的回复:
可以在被调用的函数中以字符串形式输出函数名
type functionName()
{
  printf("%s",__func__);/*__func__是个标准宏,它给出当前函数名*/
}


这正是麻烦的地方,我无法修改被调用函数,只有它的函数指针而已。

#8


引用 3 楼 xrunning 的回复:
函数指针可以算作是唯一标志了,不会有重复。通过函数指针是拿不到函数名的,函数名只在编译时起作用编译后就不存在了。


这个是倒没错,但是我是要记录下来的……所以麻烦

#9


引用 1 楼 zshtang 的回复:
不管是函数指针还是变量的指针,你都不可能通过指针获取原函数的名字或者变量的名字,因为那就是一个符号或者说标签而已,不会和内存中的变量内容有关联。

++

#10


地址, 地址, 地址

#11


这样啊,那只能手工写一个指针到函数名的map,然后在调用函数指针的时候到map中查找函数名记录下来。

不过我很好奇楼主究竟要做什么,把你的原始需求说出来,大家也许可以帮到你

#12


如果是debug版的吧,感觉应该可以通过调试信息来获取函数名的,不过不知道怎么做

#13


这个没法实现!

#14


哎呀,前段时间忙起来都忘了这个贴了。我最后是把内存地址取出来作为其标识了。谢谢各位的回复。

#15


呵呵,函数指针就是函数的地址,地址就是唯一标识!

#16


函数的指针就是函数的地址,而函数名则是函数的助记符

#1


不管是函数指针还是变量的指针,你都不可能通过指针获取原函数的名字或者变量的名字,因为那就是一个符号或者说标签而已,不会和内存中的变量内容有关联。

#2


引用 1 楼 zshtang 的回复:
不管是函数指针还是变量的指针,你都不可能通过指针获取原函数的名字或者变量的名字,因为那就是一个符号或者说标签而已,不会和内存中的变量内容有关联。


那能不能得到这个函数的唯一标识呢,我是想把调用到的函数以文本形式记录下来。

#3


函数指针可以算作是唯一标志了,不会有重复。通过函数指针是拿不到函数名的,函数名只在编译时起作用编译后就不存在了。

#4


有函数指针了,还要函数名做什么?难道是给用户浏览使用嘛

#5


可以在被调用的函数中以字符串形式输出函数名
type functionName()
{
  printf("%s",__func__);/*__func__是个标准宏,它给出当前函数名*/
}

#6


引用 4 楼 mougaidong 的回复:
有函数指针了,还要函数名做什么?难道是给用户浏览使用嘛


因为我是想要把程序运行过程中调用到的函数都记录下来,所以想找到这个函数的唯一标识,要能以文本形式来记录的东西。

#7


引用 5 楼 cao_julians 的回复:
可以在被调用的函数中以字符串形式输出函数名
type functionName()
{
  printf("%s",__func__);/*__func__是个标准宏,它给出当前函数名*/
}


这正是麻烦的地方,我无法修改被调用函数,只有它的函数指针而已。

#8


引用 3 楼 xrunning 的回复:
函数指针可以算作是唯一标志了,不会有重复。通过函数指针是拿不到函数名的,函数名只在编译时起作用编译后就不存在了。


这个是倒没错,但是我是要记录下来的……所以麻烦

#9


引用 1 楼 zshtang 的回复:
不管是函数指针还是变量的指针,你都不可能通过指针获取原函数的名字或者变量的名字,因为那就是一个符号或者说标签而已,不会和内存中的变量内容有关联。

++

#10


地址, 地址, 地址

#11


这样啊,那只能手工写一个指针到函数名的map,然后在调用函数指针的时候到map中查找函数名记录下来。

不过我很好奇楼主究竟要做什么,把你的原始需求说出来,大家也许可以帮到你

#12


如果是debug版的吧,感觉应该可以通过调试信息来获取函数名的,不过不知道怎么做

#13


这个没法实现!

#14


哎呀,前段时间忙起来都忘了这个贴了。我最后是把内存地址取出来作为其标识了。谢谢各位的回复。

#15


呵呵,函数指针就是函数的地址,地址就是唯一标识!

#16


函数的指针就是函数的地址,而函数名则是函数的助记符