【问题标题】:__func__ returns class name in debug but not in release__func__ 在调试时返回类名,但在发布时不返回
【发布时间】:2021-12-03 13:17:33
【问题描述】:

我正在使用用 Embarcadero C++ 编写的已有 12 年历史的遗留软件,我注意到: 当您在 32 位的调试或发布配置中使用 __func____FUNC__ 时,它会返回 ClassName::FunctionName,但在 64 位的调试或发布配置中内置时,它仅返回 FunctionName

这是预期的行为吗?我可以改变它吗?

我也希望 ClassName::FunctionName 在 64 位发布配置中。

我正在使用 Embarcadero® C++Builder 10.3 版本 26.0.36039.7899

到目前为止,我的 Google 技能一直令我失望,提前致谢。

【问题讨论】:

  • 标准__func__ 有一个实现定义的值。普通函数名与任何函数名一样有效。也许使用compiler specific macro 会更加一致。
  • @StoryTeller-UnslanderMonica 我尝试使用__FUNC__ 并在原帖中提供了更多信息。 __func____FUNC__ 仅在 32 位调试或发布时返回 ClassName::FunctionName,在 64 位调试或发布时返回 FunctionName
  • 通过获取函数名称你想解决什么问题
  • @KarlKnechtel:问题描述似乎很清楚。我们可以推测(例如,日志文件之间存在相似性,因此您可以使用共享的日志文件解析器)但问题已经足够清楚,可以回答了。

标签: c++ c++builder


【解决方案1】:

您可以使用__PRETTY_FUNCTION__ 获取完整的函数签名。该宏未在 Embarcadero 文档中列出,因此它可能不适用于 Classic 编译器。

C++ Builder 10.3.3 中的输出如下:

int ClassName::FunctionName(int, int)

如果需要去掉返回值和参数,只需解析字符串即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2021-03-24
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    相关资源
    最近更新 更多