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中进行编译的代码中如何包含的功能。
定义自己的宏,该宏引用__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()”。