设为首页 加入收藏

TOP

4.12.2 BOOST_CURRENT_FUNCTION
2013-10-07 15:01:53 来源: 作者: 【 】 浏览:75
Tags:4.12.2 BOOST_CURRENT_FUNCTION

4.12.2  BOOST_CURRENT_FUNCTION

微软编译器(VC)在C89的__FILE__和__LINE__之外定义了一些扩展宏,其中的__FUNCTION__宏可以表示函数名称,GCC、intel C等编译器也定义有类似的宏,而C99标准则定义了__func__宏以实现同样的功能。但目前的C++(www.cppentry.com)98标准不能这样做。

BOOST_CURRENT_FUNCTION宏为C++(www.cppentry.com)补充了这个功能,而且功能更强大,更具可移植性。

用法

为了使用BOOST_CURRENT_FUNCTION宏,需要包含<boost/current_function. hpp>,即:

  1. #include <boost/current_function.hpp> 

只需要在代码中使用BOOST_CURRENT_FUNCTION宏,就可获得包含该宏的外围函数名称,它表现为一个包含完整函数声明的编译期字符串。如果BOOST_CURRENT_FUNCTION宏不处于任何函数作用域之内,则行为依编译器而不同(在VC上会报出编译错误)。

示范BOOST_CURRENT_FUNCTION宏用法的代码如下:

  1. double func()  
  2. {  
  3.   cout << BOOST_CURRENT_FUNCTION << endl;  
  4.   return 0.0;  
  5. }  
  6. //string str = BOOST_CURRENT_FUNCTION;//err  
  7. int main()  
  8. {  
  9.   cout << __FUNCTION__ << endl;  
  10.   cout << BOOST_CURRENT_FUNCTION << endl;  
  11.   func();  
  12. }  

程序在VC8编译后运行结果如下:
  1. main  
  2. int __cdecl main(void)  
  3. double __cdecl func(void)  

实现原理

读者可能会惊讶于BOOST_CURRENT_FUNCTION宏的奇特魔力,其实BOOST_ CURRENT_FUNCTION宏并不神秘。它的实现代码实际上相当地简单,仅仅是针对各种编译器把编译器特定的宏定义为BOOST_CURRENT_FUNCTION,因此它的能力完全依赖于编译器。

例如对于VC:

  1. # define BOOST_CURRENT_FUNCTION __FUNCSIG__ 

而GCC则是:
  1. # define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ 

虽然BOOST_CURRENT_FUNCTION的功能和实现都很简单,但它的确为函数名称的显示提供了一个通用的解决办法,在配合抛出异常或者输出诊断日志时非常有用。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.10.2 用法 下一篇4.12.1 BOOST_BINARY

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: