如何获得当前功能的标识符
How can I obtain the identifier of the current function?
在c/c 中,我们有__FUNCTION__
宏,该宏被字符串替换,并保留当前函数的名称。但是,如果我想要该函数的标识符怎么办?也就是说,不是字符串,而是我可以用作创建其他标识符的令牌,例如,如果我们有
#define MAGIC /* ... */
#define MORE_MAGIC MAGIC ## _bar
void foo() {
printf("%sn",__FUNCTION__);
MORE_MAGIC();
}
void foo_bar() {
printf("%sn",__FUNCTION__);
}
void baz() {
printf("%sn",__FUNCTION__);
MORE_MAGIC();
}
void baz_bar() {
printf("%sn",__FUNCTION__);
}
int main() {
foo();
}
应该打印
foo
foo_bar
baz
baz_bar
注意:
- 我只对预处理时间感兴趣。
- 我不想用预处理器调用来代替我的功能定义 - 尽管我知道这可能会起作用。
不幸的是你不能。因为您不能 undringify 宏[1]。
换句话说,您无法删除__FUNCTION__
生成的字符串周围的引号,并通过_bar
与其联系。
如果是您想要的编译时间,对于像您这样的简单情况,预处理器宏和串联操作员##
可能是可能的。也许像
#define MORE_MAGIC(f) f##_bar
...
void foo_bar()
{
}
void foo()
{
MORE_MAGIC(foo)();
}
不可能自动获取名称foo
,必须在宏"呼叫"中明确命名。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 带内存和隔离功能的SQLite
- #ifdef和未声明的标识符
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- f2、f3、f4标识符未找到
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 功能标识符是未定义的C
- 如何获得当前功能的标识符