在C ++中复制__PRETTY_FUNCTION__的行为

Luc*_*cas -1 c++ gcc cross-platform visual-c++

在GCC中,C ++的行为__PRETTY_FUNCTION__定义在哪里?我想在Visual Studio中复制其功能。

据我了解,我可以替换__PRETTY_FUNCTION____FUNCTION____FUNCSIG__,¹,但是那样的话,我将失去在macOS上编译代码的能力。

__PRETTY_FUNCTION__我要如何在例如Visual Studio和Xcode中进行编译的代码中如何包含的功能。


  1. 如果我的问题的答案在我所链接的文本中或提及的资源中,则表示歉意。

csc*_*mge 6

定义自己的宏,该宏引用__FUNCTION____PRETTY_FUNCTION__基于您的编译器:

#ifdef _MSC_VER
#define MY_FUNCTION_MACRO __FUNCTION__ // or __FUNCSIG__
#else
#define MY_FUNCTION_MACRO __PRETTY_FUNCTION__
#endif
Run Code Online (Sandbox Code Playgroud)

然后MY_FUNCTION_MACRO在整个跨平台代码中使用。

请注意,MY_FUNCTION_MACRO这仍然会在VC ++和GCC / Clang之间产生不同的字符串。这是不可避免的,它使您尽可能地接近。

例如:

int main()
{
   std::cout << MY_FUNCTION_MACRO << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在VC ++中__FUNCTION__使用时将产生“ main”,__FUNCSIG__在VC ++中使用时将产生“ int __cdecl main(void)” ,而__PRETTY_FUNCTION__在GCC / Clang中则产生“ int main()”。