2008-10-06 111 views
18

我想在每次調用時輸出函數名稱,我可以輕鬆地複製和粘貼函數名稱,但是我想知道是否有一個快捷方式可以爲我完成這項工作?如何在調試字符串函數中獲取函數名稱?

目前我做的:

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

,但我要的是什麼通用:

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

回答

26

__FUNCTION__」由兩個MSVC和海灣合作委員會的支持,並應給你的信息,你需要。

+0

沒有意識到它是su在MSVC上推送 – 2008-10-06 10:36:27

5

如果檢出boost,則可以跨平臺移植一個宏BOOST_CURRENT_FUNCTION。在C99標準中有一個編譯器變量__func__,它具有所需的效果。我相信已被接受到C++ 0x標準。合理數量的編譯器已經可以支持這一點。

13

我從你的例子看你正在使用Qt。在這種情況下,您最好的選擇是使用<QGlobal>中的Q_FUNC_INFO。這裏的介紹:

擴展,以介紹該 功能宏駐留在此字符​​串如何 看起來更具體地說是 編譯器相關的字符串。對於GNU GCC,它通常是 函數簽名, 而與其他編譯器可能是 的行號和列號。

8

如果您使用的是gcc,您可能會發現__PRETTY_FUNCTION__更符合您的喜好。

4

__func__是C99(它反過來意味着它可能不與Visual Studio的工作 - 但嘿,它是標準的:O))

__FUNCTION__作品幾乎無處不

__PRETTY_FUNCTION__是gnu specific並返回完整限定名稱(namespaces?),classname,returntype,functionname,參數列表

相關問題