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