19

我想在每次调用时输出函数名称,我可以轻松地复制和粘贴函数名称,但是我想知道是否有一个快捷方式可以为我完成这项工作?

目前我正在做:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
    qDebug("lynxThreeFile::readSlideInfoHeader");
} 

但我想要的是通用的东西:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
    qDebug(this.className() + "::" + this.functionName());
}
4

5 回答 5

27

" __FUNCTION__" 受 MSVC 和 GCC 支持,应该为您提供所需的信息。

于 2008-10-06T10:34:28.420 回答
14

我从您的示例中看到您正在使用Qt。在这种情况下,您最好的选择是使用Q_FUNC_INFO. <QGlobal>这是描述:

扩展为描述宏所在函数的字符串。该字符串的具体外观取决于编译器。对于 GNU GCC,它通常是函数签名,而对于其他编译器,它可能是行号和列号。

于 2008-10-06T16:28:37.753 回答
8

如果您使用 gcc,您可能会发现__PRETTY_FUNCTION__更多您喜欢的内容。

于 2008-10-06T17:31:41.573 回答
5

如果您查看 boost,则有一个可跨平台移植的宏 BOOST_CURRENT_FUNCTION。在 C99 标准中,有一个编译器变量__func__具有所需的效果。我相信已经被 C++0x 标准所接受。合理数量的编译器已经支持这一点。

于 2008-10-06T13:52:41.750 回答
5

__func__是 c99 (这反过来意味着它可能不适用于视觉工作室 - 但嘿,它是标准的:o))

__FUNCTION__几乎无处不在

__PRETTY_FUNCTION__特定于 gnu 并返回带有(命名空间?)、类名、返回类型、函数名、参数列表的完整限定名

于 2008-10-20T08:47:21.237 回答