Репликация поведения __PRETTY_FUNCTION__ в C ++ - PullRequest
0 голосов
/ 24 мая 2019

Где в GCC определено поведение C ++ __PRETTY_FUNCTION__? Я хочу повторить его функциональность в Visual Studio.

Я понимаю, что могу заменить __PRETTY_FUNCTION__ либо __FUNCTION__, либо __FUNCSIG__,, но тогда я потеряю способность компилировать код в macOS.

Как включить функциональность __PRETTY_FUNCTION__ в код, который я хочу компилировать, скажем, в Visual Studio и Xcode.


  1. Извиняюсь, если ответ на мой вопрос содержится в тексте, на который я ссылаюсь или в ресурсах, которые он упоминает.

1 Ответ

6 голосов
/ 24 мая 2019

Определите свой собственный макрос, который ссылается на __FUNCTION__ или __PRETTY_FUNCTION__ на основе вашего компилятора:

#ifdef _MSC_VER
#define MY_FUNCTION_MACRO __FUNCTION__ // or __FUNCSIG__
#else
#define MY_FUNCTION_MACRO __PRETTY_FUNCTION__
#endif

И затем используйте MY_FUNCTION_MACRO в коде кросс-паттерна.

Обратите внимание, что MY_FUNCTION_MACRO будет по-прежнему создавать разные строки между VC ++ и GCC / Clang.Это неизбежно и приближает вас как можно ближе.

Например:

int main()
{
   std::cout << MY_FUNCTION_MACRO << std::endl;
}

выдаст «main» при использовании __FUNCTION__ или «int __cdecl main (void)»при использовании __FUNCSIG__ в VC ++, тогда как __PRETTY_FUNCTION__ выдает "int main ()" в GCC / Clang.

...