我想在每次调用时输出函数名,我可以轻松地复制和粘贴函数名,但我想知道是否有一个快捷方式,可以为我做这项工作?
目前我正在做:
SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
qDebug("lynxThreeFile::readSlideInfoHeader");
}
字符串
但我想要的是一些通用的东西
SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
qDebug(this.className() + "::" + this.functionName());
}
型
6条答案
按热度按时间watbbzwu1#
MSVC和GCC都支持“
__FUNCTION__
“,应该可以给予所需的信息。lg40wkob2#
我从你的例子中看到你正在使用Qt。在这种情况下,最好的选择是使用
<QGlobal>
中的Q_FUNC_INFO
。以下是描述:扩展为描述宏所在函数的字符串。此字符串的具体外观取决于编译器。对于GNU GCC,它通常是函数签名,而对于其他编译器,它可能是行号和列号。
knsnq2tg3#
如果你正在使用gcc,你可能会发现
__PRETTY_FUNCTION__
更符合你的喜好。bxjv4tth4#
**
__func__
**是c99(这意味着它可能不适用于visual studio -但它是标准的:o))**
__FUNCTION__
**几乎在任何地方都可以工作**
__PRETTY_FUNCTION__
**是特定于gnu的,返回完整的限定名(namespaces?)、classname、returntype、functionname、parametersListjhiyze9q5#
如果你查看boost,会发现一个宏BOOST_CURRENT_FUNCTION可以跨平台移植。在C99标准中,有一个编译器变量
__func__
,它具有所需的效果。我相信已经被C++0x标准所接受。一个合理数量的编译器将已经支持这一点。monwx1rj6#
如果你使用的是c++20,你可以在命名空间
std::source_location
link中调用方法function_name()
字符串
works on gcc 11.1的