首页 >后端开发 >C++ >`__PRETTY_FUNCTION__`、`__FUNCTION__` 和 `__func__` 有什么区别?

`__PRETTY_FUNCTION__`、`__FUNCTION__` 和 `__func__` 有什么区别?

Patricia Arquette
Patricia Arquette原创
2024-12-23 21:51:10320浏览

What are the Differences Between `__PRETTY_FUNCTION__`, `__FUNCTION__`, and `__func__`?

了解 PRETTY_FUNCTION__、__FUNCTION__ 和 __func

之间的差异在编码领域,理解这一点至关重要三个标识符的区别: __PRETTY_FUNCTION__、__FUNCTION__ 和 __func__。每个都有其独特的属性和文档,根据所需的结果影响我们的选择。

深入研究 func

在 C99 中引入,func 提供了一个简单的解决方案,用于在函数范围内访问当前函数的名称。它扩展为包含未修饰的函数名称的字符数组。这个标识符在 C 中也得到了关注,在 C 11 中添加了一个稍微不同的定义:“实现定义的字符串。”

探索 FUNCTION

某些 C 编译器支持 FUNCTION 作为预标准扩展,但是仅仅依赖它是不可取的。对于缺乏 func 支持的编译器,FUNCTION 可以作为替代品,尽管与标准化版本相比有局限性。

Enter PRETTY_FUNCTION

__PRETTY_FUNCTION__ 是 gcc 特有的扩展,其操作与 __FUNCTION__ 类似。然而,在 C 函数的上下文中,它提供了函数名称的增强版本,以及函数签名。 Visual C 在 __FUNCSIG__ 中提供了类似的替代方案,但有细微的差别。

文档和可用性

对于非标准宏,请谨慎参考相应的编译器文档。 Visual C 扩展在 MSDN 中 C 编译器的“预定义宏”下有详细记录,而 gcc 扩展则在文档页面“函数名称作为字符串”中介绍。

选择正确的标识符

选择适当的标识符取决于所需的结果和编译器

  • __func__: 使用它来标准化访问 C99 及更高版本中的未修饰函数名称。
  • __FUNCTION__: 考虑使用当 func 不可用时,但要注意它
  • __PRETTY_FUNCTION__:如果您需要带有 C 代码签名的“漂亮”函数名称,尤其是 gcc,请选择此选项。

通过理解了解这些标识符的细微差别,您可以有效地利用它们的力量来获取您在编码工作中所需的功能相关信息。

以上是`__PRETTY_FUNCTION__`、`__FUNCTION__` 和 `__func__` 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn