__FUNCTION__, __func__, __PRETTY_FUNCTION__

来源:互联网 发布:python 字符串转json 编辑:程序博客网 时间:2024/06/06 05:49

http://blog.csdn.net/linuxheik/article/details/7621155

Solaris下支持C99的__func__

gcc 支持 __FUNCTION__, __func__, __PRETTY_FUNCTION__


俺一般使用__FUNC__

C/C++ code
#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__ 函数,提供类名和函数名称的输出。

原创粉丝点击