You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何typeid::name返回简化名称而非预期的函数导出名称?

问题原因解析

typeid(&my_amazing_function).name() 返回的 FvdE 和你预期的 _Z19my_amazing_functiond 本质是两种不同的编译器混淆(mangled)名称,对应不同的用途:

  • FvdE 是函数类型的简化混淆名:
    你调用typeid时传入的是函数指针,它识别的是void(*)(double)这个函数类型,而非函数实体本身。GCC/Clang对这类类型的简化混淆规则里,F代表函数、v代表void返回值、d代表double参数、E标记类型结束,组合起来就是FvdE。

  • _Z19my_amazing_functiond 是函数实体的完整链接符号名:
    这是遵循Itanium C++ ABI标准的完整混淆符号,包含了函数名长度(19)、函数名my_amazing_function、参数类型d(double),是链接器用来定位函数实体的名称。

简单说,你用typeid查询的是函数指针的类型信息,得到的是类型的混淆名;而你想要的是函数本身的链接符号名,这两者的生成规则完全不同,所以结果不符。

如果要获取函数的完整链接符号名,不能依赖typeid,可以用这些方式:

  • 用nm等工具查看目标文件的符号表
  • 使用GCC内置的__builtin_FUNCTION__(返回可读函数名,不是混淆后的符号)

内容的提问来源于stack exchange,提问作者user15807286

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:00:17