Как сымитировать версию __FUNCTION__ от Microsoft с помощью gcc?

Когда я использую макрос / переменную __ 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)

. Это нормально, но это слишком многословно для того, что мне нужно, и немного long для функций с большим количеством параметров.

Итак, мой вопрос (наконец): есть ли способ получить вывод, который выглядел бы просто как Foo :: Bar , используя gcc, как в примере выше?

8
задан binarybob 4 October 2011 в 22:11
поделиться