在Visual C ++中__PRETTY_FUNCTION__

Ada*_*ura 6 c++ visual-studio visual-c++ visual-studio-2017

在使用Visual Studio 2017(准确地说是15.5.6)中的Visual C ++玩耍时,我注意到__PRETTY_FUNCTION__GCC似乎起作用了!-至少在某种程度上……

在键入时确实显示了建议: 在此处输入图片说明

同样,它的值也如预期的那样显示在工具提示中: 在此处输入图片说明

但是使用编译代码会__PRETTY_FUNCTION__导致错误:

error C2065: '__PRETTY_FUNCTION__': undeclared identifier
Run Code Online (Sandbox Code Playgroud)

因此,有什么方法可以使其在Visual C ++中运行?也许包括一些?还是一些特殊的编译设置?(我认为我使用的是默认值。)为什么在所示示例中有效,但在实际使用中无效?

请注意,我不是在寻找Visual C ++替代品__PRETTY_FUNCTION__。我已经知道了 我对这里的行为感到惊讶和好奇。

Jon*_*tte 8

您可以通过将其放入一些通用标头中来很好地模拟它(例如,您的预编译标头,如果您正在使用它):

#if !defined(__PRETTY_FUNCTION__) && !defined(__GNUC__)
#define __PRETTY_FUNCTION__ __FUNCSIG__
#endif
Run Code Online (Sandbox Code Playgroud)

它的计算结果与PRETTY_FUNCTION并不完全相同,但它是具有参数类型的函数名称的人类可读表示。

  • 对于那些只是复制和粘贴的人,我改进了该解决方案,使其开箱即用,与 GNU 兼容。 (3认同)

Mih*_*ayl 6

因此,有什么方法可以使其在Visual C ++中运行?也许包括一些?还是一些特殊的编译设置?(我认为我使用的是默认值。)为什么在所示示例中有效,但在实际使用中无效?

没有。

Visual Studio将Edison Design Group C ++前端用于InteliSense,如Visual C ++团队博客的Rebuild Intellisense此处(而非Microsoft C ++编译器)所述。这意味着Intellisense可用的某些功能在编译时不可用。

EDG的C ++前端文档提到它支持某些GCC __PRETTY_FUNCTION__预定义,如第71页“ 1.13预定义宏”以及Microsoft一样__FUNCSIG__

您甚至可以通过键入__EDG_VERSION__并悬停在EDG上来查看其版本。

  • 完整的宏检查 `#ifdef _MSC_VER #define __PRETTY_FUNCTION__ __FUNCSIG__ #endif` (3认同)
  • 有一种方法可以使其正常工作。包括以下内容:`#define __PRETTY_FUNCTION__ __FUNCSIG__` (2认同)