Когда я использую макрос / переменную __FUNCTION__
для вывода отладочной информации, кажется, что есть разница в том, что она выводит при использовании компилятора Microsoft C ++ и gcc. Например, используя следующий тривиальный код:
class Foo
{
public:
void Bar(int a, int b, int c)
{
printf ("__FUNCTION__ = %s\n", __FUNCTION__);
}
};
int main (void)
{
Foo MyFoo;
MyFoo.Bar();
return 0;
}
Используя компилятор Microsoft Visual C ++, я получаю
__FUNCTION__ = Foo::Bar
тогда как при компиляции с использованием gcc (в данном случае на Mac) я получаю
__FUNCTION__ = Bar
Второй пример не идеален, потому что у меня довольно часто есть несколько классов с, скажем, методами Init()
и Uninit()
и в отладочной трассировке вывода практически невозможно определить, какой из них был вызван как имя класса будет отсутствовать. Теперь я знаю, что вы можете использовать __PRETTY_FUNCTION__
вместо __FUNCTION__
, чтобы получить что-то вроде
__PRETTY_FUNCTION__ = void Foo::Bar(int, int, int)
Это нормально, но слишком многословно для того, что мне нужно, и становится немного длиннее для функций с большим количеством параметров.
Так что мой вопрос (наконец-то), есть ли способ заставить вывод выглядеть просто Foo::Bar
, используя gcc, как в примере выше?