ein*_*ica 8 c c++ macros c-preprocessor
在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();
}
Run Code Online (Sandbox Code Playgroud)
应该打印
foo
foo_bar
baz
baz_bar
Run Code Online (Sandbox Code Playgroud)
笔记:
如果您想要编译时,并且对于像您这样的简单情况,则可以使用预处理器宏和串联运算符##。也许像
#define MORE_MAGIC(f) f##_bar
...
void foo_bar()
{
}
void foo()
{
MORE_MAGIC(foo)();
}
Run Code Online (Sandbox Code Playgroud)
但不可能foo自动获取名称,必须在宏“call”中显式命名。