gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:50:19 29 4
gpt4 key购买 nike

当我使用 __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,如上例所示?

最佳答案

如果您将其用于跟踪,您始终可以使用 typeid(T).name() 并根据平台进行条件编译。当然不如宏方便,但它可以工作。

隐约类似于__CLASS__ macro in C++

关于c++ - 如何使用 gcc 模仿 Microsoft 版本的 __FUNCTION__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649944/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com