如何使用gcc模仿Microsoft版本的__FUNCTION__?

bin*_*bob 8 c++ windows compiler-construction macos 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;
}
Run Code Online (Sandbox Code Playgroud)

我得到了使用Microsoft Visual C++编译器

__FUNCTION__ = Foo::Bar
Run Code Online (Sandbox Code Playgroud)

而在使用gcc编译时(在本例中是在Mac上),我得到了

__FUNCTION__ = Bar
Run Code Online (Sandbox Code Playgroud)

第二个例子并不理想,因为我经常有几个类,比方说Init()Uninit()方法,并且在调试输出跟踪中,几乎不可能知道哪个类被调用,因为类名将丢失.现在,我知道你可以使用__PRETTY_FUNCTION__代替它__FUNCTION__来获得类似的东西

__PRETTY_FUNCTION__ = void Foo::Bar(int, int, int)
Run Code Online (Sandbox Code Playgroud)

这很好,但它对于我需要的东西有点过于冗长,并且对于具有大量参数的函数来说有点长.

所以我的问题是(最后),有没有办法让输出看起来像简单地Foo::Bar使用gcc,如上例所示?

Tom*_*err 3

如果您使用它进行跟踪,您始终可以使用它typeid(T).name(),并且只需按平台进行条件编译即可。当然不如宏那么方便,但它可以工作。

有点类似于C++ 中的 __CLASS__ 宏