__FUNCTION__,__FILE__是如何实现的
想知道这个是如何实现的,另外,如果知道一个函数的地址,能否得到在这个地址上的函数名?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
想知道这个是如何实现的,另外,如果知道一个函数的地址,能否得到在这个地址上的函数名?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
编译时记录的
ts
这个好像是编译器内部的宏
怎么实现的,没想过,但是编译过程中做这事应该没难吧,虽然我没有学过编译原理。
已经函数地址可以得到函数名,不过要在编译以后,有调试信息才行。
编译的时候,加调试信息没问题。
那么如何得到函数名呢?
举例:
将函数指针B传到函数A中,想在A中得到传入的函数指针B的函数名。
把B函数名作为参数带进去吧。。
看一下预处理之后的代码就知道了, 全替换了
回复 7# 雨过白鹭洲
不想在对外的接口提供这么个参数,最好是内部处理下。
写了个测试程序,这样的宏,展开之后直接就是结果,应该是编译预处理的时候就直接处理完了,没有显示中间的过程。
奇怪的是:__FILE__和__LINE__都是替换为最终结果,而__FUNCTION__没有替换,但是程序运行起来,还是可以打印正确结果。
推测,__FUNCTION__指向了可执行程序中的某个位置,这个位置放置了函数名字,不然为什么运行结果是对的。