本文主要是介绍__FUNCTION__, __func__, __PRETTY_FUNCTION__,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://blog.csdn.net/linuxheik/article/details/7621155
Solaris下支持C99的__func__
gcc 支持 __FUNCTION__, __func__, __PRETTY_FUNCTION__
俺一般使用__FUNC__
#if defined (__GNUC__) # define __FUNC__ ((const char*) (__PRETTY_FUNCTION__)) #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 19901L # define __FUNC__ ((const char*) (__func__)) #else # define __FUNC__ ((const char*) (__FUNCTION__)) #endif
http://blog.csdn.net/fullsail/article/details/
有一次为了调试ACE的代码打开了ACE_TRACE的开关,除了对蜂拥而出的日志输出有印象外还对ACE的函数进出提示产生了好感。对于后台调试的时候,往往必须使用大量的日志跟踪。而简单的加入函数进出的功能是一个不错的选择。
稍稍看了一下ACE的实现,感觉效果一般,还要自己写跟踪的函数名称。也不是太爽。(ACE估计是苦于大家对C++标准的支持程度)。感觉了一下,其实函数的进出跟踪都可以使用一个结构的构造和析构函数跟踪,而函数的信息完全可以使用各种宏代替。而这些信息可以作为参数传递给这个结构。
GCC实现了如下的函数宏
__func__ C99的标准,但是GCC只输出函数名称。不知道VC.NET 为啥不支持
__FUNCTION__ 同__func__,
__PRETTY_FUNCTION__ 非标准宏。这个宏比__FUNCTION__功能更强, 若用g++编译C++程序, __FUNCTION__只能输出类的成员名,不会输出类名;而__PRETTY_FUNCTION__则会以 <return-type> <class-name>::<member-function-name>(<parameters-list>) 的格式输出成员函数的详悉信息(注: 只会输出parameters-list的形参类型, 而不会输出形参名).若用gcc编译C程序,__PRETTY_FUNCTION__跟__FUNCTION__的功能相同.
而VC.NET提供的函数宏为:
__FUNCTION__ 函数,提供类名和函数名称的输出。
这篇关于__FUNCTION__, __func__, __PRETTY_FUNCTION__的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!