在C / C ++中,我们将__FUNCTION__
宏替换为字符串,并保存当前函数的名称。但是,如果我想要函数的标识符怎么办?也就是说,不是字符串,而是我可以用作创建其他标识符的标记,例如,如果我们有
#define MAGIC /* ... */
#define MORE_MAGIC MAGIC ## _bar
void foo() {
printf("%s\n",__FUNCTION__);
MORE_MAGIC();
}
void foo_bar() {
printf("%s\n",__FUNCTION__);
}
void baz() {
printf("%s\n",__FUNCTION__);
MORE_MAGIC();
}
void baz_bar() {
printf("%s\n",__FUNCTION__);
}
int main() {
foo();
}
应该打印
foo
foo_bar
baz
baz_bar
注意:
答案 0 :(得分:3)
不幸的是你做不到。因为您无法取消分析宏[1]。
换句话说,您无法删除__FUNCTION__
生成的字符串周围的引号,并通过_bar
与其联系。
答案 1 :(得分:2)
如果它是你想要的编译时间,对于像你这样的简单情况,可能有预处理器宏和连接运算符##
。也许像是
#define MORE_MAGIC(f) f##_bar
...
void foo_bar()
{
}
void foo()
{
MORE_MAGIC(foo)();
}
虽然无法自动获取名称foo
,但必须在宏“call”中明确命名。