c++ - 如何获取当前函数的标识符?

标签 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();
}

应该打印

foo
foo_bar
baz
baz_bar

注意事项:

  • 我只对预处理时间感兴趣。
  • 我宁愿不使用预处理器调用替换我的函数定义 - 虽然我知道这可能会起作用。

最佳答案

不幸的是你不能。因为您不能unstringify 宏[ 1 ].

换句话说,您不能删除由 __FUNCTION__ 生成的字符串周围的引号并通过 _bar 联系它。

关于c++ - 如何获取当前函数的标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22320488/

相关文章:

objective-c - 宏编译器错误: "Parse Issue" when an argument name appears elsewhere

c - 我们如何编写 C 宏来将强制转换插入函数调用?

c++ - 如何在 WinRT 中用 C++ 创建新的 GUID?

c++ - 在centos上打开gcc

C 根据用户输入打印出缩写词

c++ - 在C++和OpenCV中调用其他文件中的函数

macros - 无法使用 rsfuzzy crate 中的宏

c++ - ExTAPI : lineRegister returns before line is registered

c++ - 为什么在抛出 'std::bad_alloc' 实例后调用终止?

c++ - 替换文件中的单词