【问题标题】:Is it possible in C/C++ to put the name of a function into the code at compile time?在 C/C++ 中是否可以在编译时将函数的名称放入代码中?
【发布时间】:2019-08-05 10:32:09
【问题描述】:

我会有数百个这样的功能

void OrganOut() 
{       
    Title("OrganOut");

第一行将函数的标题显示在 LCD 显示屏上(它是一个嵌入式音乐系统,您可能可以通过名称猜到)。由于函数名称在编译时显然是已知的,有没有办法自动将名称放在 Title 中以避免输入两次名称?

【问题讨论】:

  • 下面的答案很好,现在是您的下一个问题“如何使用我的编辑器将“...”替换为__func__“?
  • @Dupe spotters:这个问题在内容上比这个问题“更广泛”,并且没有 C++ 标签。让我们更忠实地坚持“准确”。磁盘便宜。当我在图书馆研究一个主题时,我喜欢看不止一本书。我们不会仅仅因为有马太就从圣经中删除马可、路加和约翰。
  • @Bathsheba 我仍然没有看到我用作 dup 的问题的问题。在这里留下评论:Print the file name, line number and function name of a calling function - C Prog
  • @SouravGhosh:因为这个也是在 C++ 标签上问的。
  • @SouravGhosh:有些问题,例如这个问题,对于 C 和 C++ 标记都非常适合。

标签: c++ c function


【解决方案1】:

您正在寻找__func__

void OrganOut() 
{       
    Title(__func__);
}

C99 和 C++11 标准分别提供此功能。

【讨论】:

  • 是的,我们 C++ 人花了几年时间才意识到这有多么有用 ;-)
  • 您还可以将__PRETTY_FUNCTION__ 用作包含更多信息的 gcc 扩展程序
  • @MikeBryant __func__ 相当于拥有一个局部变量static const char __func__[] = "function-name";。因此,如果 Title 不是 const 限定的,则应将其更改为 const 正确的。在 C 和 C++ 中相同。
  • @Bathsheba 该代码是从 C99 标准复制/粘贴的。您将它与 C 中的字符串文字类型混为一谈,这确实是 char[],这与 C++ 不同。也就是说,在 C 中,"function-name" 的类型为 char[],但 __func__ 的类型为 const char[]
  • @MikeBryant 实时程序员像瘟疫一样避免使用 C++。如果您混合使用您正在编写 C++ 的语言,则没有“混合”之类的东西。然后你会得到一些东西,比如在系统启动期间构建的静态存储对象以及其他类似的 C++ 滞后情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2012-03-14
  • 2011-08-23
  • 2012-07-14
相关资源
最近更新 更多