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

Embarcadero C++Builder 64位下__func__不返回类名::函数名如何解决?

C++Builder 10.3 __func__跨架构返回值差异问题解答

是否为默认预期行为

该差异属于工具的默认预期行为:

  • CBuilder 10.3的32位编译链基于经典Borland C编译器实现,对C++标准要求仅返回纯函数名的__func__/__FUNC__做了厂商扩展,默认返回包含类名的完整函数标识。
  • 64位编译链基于Clang框架实现,默认严格遵循C++标准规范,__func__/__FUNC__仅返回当前函数的纯名称,不包含所属类、命名空间等前缀信息。

64位Release环境下获取带类名完整函数标识的方案

无法直接通过编译配置修改64位环境下__func__/__FUNC__的返回格式,可通过编译器兼容扩展宏实现需求:
64位Clang编译链支持__PRETTY_FUNCTION__宏,该宏会返回包含类名、命名空间、参数列表的完整函数签名,且32位经典编译器同样兼容该宏。你可以在公共头文件中定义统一的跨架构宏替换原有__func__调用,示例如下:

// 跨架构统一获取完整函数标识宏
#if defined(__BORLANDC__)
    #if defined(__clang__)
        // 64位Clang编译器分支
        #define FULL_FUNC_SIGN __PRETTY_FUNCTION__
    #else
        // 32位经典编译器分支
        #define FULL_FUNC_SIGN __func__
    #endif
#endif

该宏在32位、64位的Debug和Release配置下均可正常生效,无需修改额外编译选项,对原有代码侵入性极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:15:05