新艾尚网站建设推广,检察院网站建设自查报告,在深圳注册公司需要多少钱,亳州是网站建设func、FUNCTION、__PRETTY_FUNCTION__的区别
常用获取函数名成的方法都有__func__、FUNCTION、PRETTY_FUNCTION。那么它们的区别是什么呢#xff1f; 1) func、FUNCTION#xff1a; 主要是获取函数的名称。 2) PRETTY_FUNCTION#xff1a; 不仅能获取函数的名称 1) func、FUNCTION 主要是获取函数的名称。 2) PRETTY_FUNCTION 不仅能获取函数的名称同样也能获取函数传递的参数。
#include iostreamusing 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__的区别
FUNCTION 和 func 都是预定义的宏用于在编译时获取当前函数的名称字符串。
但是它们之间存在一些区别
FUNCTION 是一个非标准的宏在C98和C03标准中被定义为预处理器扩展。在C99和C11标准中它已被删除。而 func 是标准 C 和 C 的宏从C99/C98开始引入。
FUNCTION 会返回包含类作用域的完整函数名而 func 只返回函数名。例如如果您有一个名为 MyClass::myFunction() 的成员函数则 FUNCTION 将返回 “MyClass::myFunction”而 func 将仅返回 “myFunction”。
在函数原型或函数定义中使用 func 时它与函数名称具有相同的类型即 const char[]。但是在使用 FUNCTION 时其类型因实现而异通常为 const char* 或 const char[]。
综上所述虽然这两个宏都可以用于获取当前函数的名称字符串但 func 更好地符合标准并且更简洁和易于使用。