当我使用__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__
in__FUNCTION__
来获得类似的东西
__PRETTY_FUNCTION__ = void Foo::Bar(int, int, int)
这很好,但是对于我需要的东西来说它有点过于冗长,并且对于有很多参数的函数来说有点长。
所以我的问题是(最后),有没有办法让输出看起来像简单地Foo::Bar
使用 gcc,就像上面的例子一样?