【问题标题】:Can I store pointer to __PRETTY_FUNCTION__ for later use or do I need to copy the string immediately?我可以存储指向 __PRETTY_FUNCTION__ 的指针以供以后使用还是需要立即复制字符串?
【发布时间】:2020-10-08 10:08:37
【问题描述】:

__PRETTY_FUNCTION__ 产生的字符串的生命周期是多少?

我知道__func__ 生成等效于static const char __func__[] = "function-name";,感谢static,如果我想创建函数中某处发生的事情的记录以供以后参考,我可以存储@987654325 的值@ 在记录中的const char* 字段中,并在我离开函数范围很久之后随时检索它。

__PRETTY_FUNCTION__ 的行为方式是否相同,或者它生成的字符串是否表现为本地临时值?说,这会可靠地工作,还是会失败,fname 指向函数名曾经所在的位置,我需要做一个缓冲区并做strncpy() 或类似的操作?

#include <stdio.h>
const char* fname = NULL;

void foo()
{
    fname = __PRETTY_FUNCTION__;
}

int main()
{
    foo();
    printf(fname);
    return 0;
}

【问题讨论】:

    标签: c gcc scope lifetime


    【解决方案1】:

    __func____FUNCTION____PRETTY_FUNCTION__ 这三个常量的行为方式相同。 GCC Manual 声明:

    GCC 提供了三个魔术常量,它们将当前函数的名称保存为字符串。在 C++11 及更高版本的模式中,这三个都被视为常量表达式,可以在 constexpr 上下文中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-11
      • 2015-02-16
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2017-02-01
      相关资源
      最近更新 更多