C++?獲取當(dāng)前正在運(yùn)行函數(shù)的名稱
func、FUNCTION、__PRETTY_FUNCTION__的區(qū)別
常用獲取函數(shù)名成的方法都有__func__、FUNCTION、PRETTY_FUNCTION。那么它們的區(qū)別是什么呢?
1) func、FUNCTION: 主要是獲取函數(shù)的名稱。
2) PRETTY_FUNCTION: 不僅能獲取函數(shù)的名稱,同樣也能獲取函數(shù)傳遞的參數(shù)。
#include <iostream>
using namespace std;
int test_fun(int a, int b){
? ? cout << "__func__: " << __func__ << endl;
? ? cout << "__FUNCTION__: " << __FUNCTION__ << endl;
? ? cout << "__PRETTY_FUNTION__: " << __PRETTY_FUNCTION__ << endl;
? ? return 0;
}
int main(int argc, char** argv){
? ? test_fun(1, 1);
? ? return 0;
}
result:
__func__: test_fun
__FUNCTION__: test_fun
__PRETTY_FUNTION__: int test_fun(int, int)func、__FUNCTION__的區(qū)別?
FUNCTION 和 func 都是預(yù)定義的宏,用于在編譯時(shí)獲取當(dāng)前函數(shù)的名稱字符串。
但是它們之間存在一些區(qū)別:
FUNCTION 是一個(gè)非標(biāo)準(zhǔn)的宏,在C++98和C++03標(biāo)準(zhǔn)中被定義為預(yù)處理器擴(kuò)展。在C99和C11標(biāo)準(zhǔn)中,它已被刪除。而 func 是標(biāo)準(zhǔn) C 和 C++ 的宏,從C99/C++98開(kāi)始引入。
FUNCTION 會(huì)返回包含類作用域的完整函數(shù)名,而 func 只返回函數(shù)名。例如,如果您有一個(gè)名為 MyClass::myFunction() 的成員函數(shù),則 FUNCTION 將返回 “MyClass::myFunction”,而 func 將僅返回 “myFunction”。
在函數(shù)原型或函數(shù)定義中使用 func 時(shí),它與函數(shù)名稱具有相同的類型,即 const char[]。但是,在使用 FUNCTION 時(shí),其類型因?qū)崿F(xiàn)而異,通常為 const char* 或 const char[]。
綜上所述,雖然這兩個(gè)宏都可以用于獲取當(dāng)前函數(shù)的名稱字符串,但 func 更好地符合標(biāo)準(zhǔn),并且更簡(jiǎn)潔和易于使用。
到此這篇關(guān)于C++ 獲取當(dāng)前正在運(yùn)行函數(shù)的名稱的文章就介紹到這了,更多相關(guān)C++獲取函數(shù)名稱內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別(推薦)
- C++ getcwd函數(shù)獲取項(xiàng)目運(yùn)行路徑方法詳解
- 如何使用C++獲取指定的重載函數(shù)地址
- C++獲取字符串長(zhǎng)度的幾個(gè)函數(shù)方式
- c/c++獲取系統(tǒng)時(shí)間函數(shù)的方法示例
- 如何獲取C++類成員虛函數(shù)地址的示例代碼
- C++獲取類的成員函數(shù)的函數(shù)指針詳解及實(shí)例代碼
- C++中可正確獲取UTF-8字符長(zhǎng)度的函數(shù)分享
相關(guān)文章
重構(gòu)-C++實(shí)現(xiàn)矩陣的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇重構(gòu)-C++實(shí)現(xiàn)矩陣的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
VS2019添加引用出錯(cuò):對(duì)COM組件的調(diào)用返回了錯(cuò)誤HRESULT E_FAIL(未能完成操作未指定的錯(cuò)誤)
這篇文章主要介紹了VS2019添加引用出錯(cuò):對(duì)COM組件的調(diào)用返回了錯(cuò)誤HRESULT E_FAIL(未能完成操作。未指定的錯(cuò)誤),需要的朋友可以參考下2020-07-07
C++實(shí)現(xiàn)Go的defer功能(示例代碼)
defer和go一樣都是Go語(yǔ)言提供的關(guān)鍵字。defer用于資源的釋放,會(huì)在函數(shù)返回之前進(jìn)行調(diào)用。接下來(lái)通過(guò)本文給大家介紹C++實(shí)現(xiàn)Go的defer功能,感興趣的朋友跟隨小編一起看看吧2021-07-07

