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
相关产品推荐
相关产品推荐

