在C和C中,您可以使用C99和C11通过__func__
宏获取当前正在执行的函数的名称,对于MSVC,可以使用___FUNCTION___
。
在《 rust 》中有没有类似的东西?
C语言中__func__
的示例:
#include "stdio.h"
void funny_hello() {
printf ("Hello from %s\n", __func__);
}
int main() {
funny_hello();
}
输出Hello from funny_hello
。
5条答案
按热度按时间voase2hg1#
你可以和
std::any::type_name
一起破解一个。请注意,这给出了完整的路径名,因此是
my::path::my_func
而不是my_func
。A demo is available.83qze16e2#
有一个关于这一点的RFC,但它从来没有达成一致或实施。
不存在的理由:
一般来说,我认为我们中得任何人都没有过多地考虑过这些“与调试相关”得宏得长期稳定性.它们中得大多数看起来都是无害得,但是承诺为所有Rust程序永远提供所有这些宏是一个强有力得承诺.我们可能需要简要地考虑一下这些宏得故事,同时考虑添加这个新宏.
也许Rust将来会有类似的东西,
但是现在您需要依靠自己的标记。
__FUNCTION__
是非标准的,__func__
存在于C99 / C++11中。jei2mxaa3#
添加到Veedrac's answer,您可以通过添加以下内容来获得不带完整路径的函数名:
例如,您将得到
my_func
而不是my::path::my_func
。tp5buhyn4#
看起来
function_name
板条箱可以做到这一点。https://docs.rs/function_name/latest/function_name/
文档中的示例是
我没有参与该项目,实际上还没有尝试过。
t1qtbnec5#
虽然缺乏官方支持,但有stdext crate(RFC问题中也提到了)使其易于使用。
这包括模块/特征名称,如
::module::Trait::function
(如果有)。如果你只关心名字而不是它的整个路径,你可以对trait方法做一些类似的事情(记住,这会有运行时开销,你可能想用OnceCell来限制它):